当结果为空时,LINQ会返回什么

时间:2009-07-28 04:19:02

标签: c# linq

我对LINQ查询有疑问。通常,查询返回IEnumerable<T>类型。如果返回为空,则不确定它是否为null。如果ToList()结果中找不到任何内容,我不确定以下List<string>是否会引发异常,或者只是空IEnumerable

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

我知道这是一个非常简单的问题,但我暂时没有VS.

7 个答案:

答案 0 :(得分:444)

它将返回一个空的可枚举。它不会是空的。你可以睡觉声音:)

答案 1 :(得分:34)

您还可以查看.Any()方法:

if (!YourResult.Any())

请注意.Any仍将从数据库中检索记录;执行.FirstOrDefault()/.Where()将会产生相同的开销,但您可以捕获从查询返回的对象

答案 2 :(得分:17)

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(转储来自LinqPad

答案 3 :(得分:13)

.ToList返回一个空列表。 (与新List())相同;

答案 4 :(得分:7)

在Linq-to-SQL中,如果尝试获取没有结果的查询的第一个元素,则会出现sequence contains no elements错误。我可以向您保证,上述错误不等于object reference not set to an instance of an object。 总而言之,它不会返回null,因为null不能说sequence contains no elements它总是会说object reference not set to an instance of an object;)

答案 5 :(得分:6)

它不会抛出异常,你会得到一个空列表。

答案 6 :(得分:6)

此处的其他帖子已明确表示结果是“空”IQueryable,ToList()将正确地更改为空列表等。

请注意一些操作符,因为如果您向它们发送一个空的可枚举,它们将抛出。将它们链接在一起时可能会发生这种情况。