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

我有一个关于LINQ查询的问题。 通常查询返回一个IEnumerabletypes。 如果返回是空的,不知道是否为空。 如果在IEnumerable结果中找不到任何东西,我不确定下面的ToList()是否会抛出一个exception或只是一个空的List <string>?

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可用。

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

您也可以检查.Any()方法:

 if (!YourResult.Any()) 

只是一个说明.Any仍然会从数据库检索logging; 做一个.FirstOrDefault()/.Where()将是一样多的开销,但你将能够赶上查询返回的对象

 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 )

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

在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 ;)

这里的其他post已经明确表示,结果是一个“空的”IQueryable,其中ToList()将正确地更改为空列表等

对一些操作员要小心,因为如果你给他们一个空的enumerable,他们会抛出。 当你将它们链接在一起时,这可能会发生

它不会抛出exception,你会得到一个空的列表。