Lambda与LINQ-“Expression is always false”

9
我有以下代码:

var thing = (from t in things
             where t.Type == 1 && t.IsActive
             select t).SingleOrDefault();

if (thing == null)
{
    // throw exception
}

things 是一个 Entity Framework 自跟踪实体的集合。

这个方法很好用,但我想使用 Lambda 表达式,所以将 LINQ 改为了这样:

var thing = things.Select(t => t.Type == 1 && t.IsActive).SingleOrDefault();

现在Resharper告诉我(thing == null)的表达式总是错误的。我错过了什么?
1个回答

15

你希望:

var thing = things.Where(t => t.Type == 1 && t.IsActive).SingleOrDefault();

Select执行一个投影操作(将IEnumerable的类型从转换为,如果t.Type == 1 && t.IsActive == true,则为true,否则为false),然后SingleOrDefault返回此序列中唯一的boolbool的默认值false(如果序列为空)。这永远不会是null,因为bool不是引用类型。

Where执行过滤操作(仅提取符合给定条件的对象 - 在这种情况下,只选择那些为1且为true的对象),使IEnumerable的类型保持为。假设Thing是一个类,则SingleOrDefault将返回序列中唯一的项或null

在任何情况下,如果序列包含多个项(在


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接