有人可以告诉我以下两个LINQ语句的区别吗?
var ChkUnique = DB.BusinessFile.FirstOrDefault(c => c.ROCNo == txtBoxID.Text);
和
var ChkUnique = from c in DB.BusinessFile
where c.ROCNo == (string)txtBoxID.Text
select c;
如果无法找到匹配项, ChkUnique != null
会返回前一位false
,后者会返回true
,我无法弄清楚为什么会发生这种情况。
我是LINQ的新手,所以我可能错过了一些非常基本的内容,但此刻让我感到疯狂。
答案 0 :(得分:10)
第二个代码返回一个表示您正在调用的查询的对象;它永远不会是空的。虽然一旦枚举,它可能是一个空集合。 (但仍然不是空的)
您的第一个是调用FirstOrDefault,它将单个结果强制转换为单个变量,如果没有结果则返回null。如果您使用Where
代替FirstOrDefault
,则两次都会得到相同的结果。
答案 1 :(得分:1)
第一个语句使用Extension Method,第二个语句是LINQ Query Expression。
在第一个方法FirstOrDefault
中,返回序列的第一个元素,如果序列不包含元素,则返回默认值。在这里,您正在处理对象,因此如果您的结果不包含任何元素,则默认返回为NULL
。
另一方面,你的第二个语句总是返回IEnumerable<T>
集合类型值,它永远不会为空。只是你可以使用Collection的Count
属性检查集合是否包含项目。
如果在第一个语句中使用扩展方法.Where()
,那么它将等同于第二个语句。
检查指定的链接以获取详细信息和差异。