【问题标题】:Why doesn't using a nullable Guid work in this linq query?为什么在此 linq 查询中使用可为空的 Guid 不起作用?
【发布时间】:2011-12-28 08:16:01
【问题描述】:

我有这段代码可以找到树的根节点:

Guid? currentNode = null; 
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode).ToList();

此查询返回 0 个结果。

如果我运行此查询,我会返回预期的行:

var root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList();

为什么第一个查询不起作用(使用最新版本的实体框架)?

编辑:

解决方法:

List<RecursiveTree> root;
if (nodeid == null)
   root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList();
else
   root = db.RecursiveTrees.Where(x => x.ParentId == new Guid(nodeid)).ToList();     

【问题讨论】:

    标签: c# asp.net linq entity-framework


    【解决方案1】:

    这是 LINQ to Entities 在处理可空值类型时的一个已知错误。根据相关Connect issue的说法,这将在下一个版本中修复。

    【讨论】:

    • 谢谢 - 我将更改代码以避免过滤可空的 Guid
    • 在 EF 6.1.3 中仍未修复。如果它曾经被修复,它会再次被打破。
    【解决方案2】:

    试试这个

    Guid? currentNode = null; 
    var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode.Value).ToList();
    

    【讨论】:

    • 从 HasValue 为 false 的 Nullable 中检索 Value 将引发异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2012-08-25
    • 2013-03-11
    • 2022-01-23
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多