IEnumerable<T>
类型。如果返回为空,则不确定它是否为空。我不确定以下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。
#1 楼
它将返回一个空的可枚举。它不会为空。你可以睡觉的声音:)#2 楼
您还可以检查.Any()
方法:if (!YourResult.Any())
请注意,
.Any
仍将从数据库中检索记录;进行一次.FirstOrDefault()/.Where()
的开销会一样多,但是您将能够捕获查询返回的对象评论
问题在哪里提到数据库?
–cja
13年11月14日10:00
您必须问编辑的那个,我没有提到任何数据库:)
– Noich
2014年7月6日下午5:37
点编辑器正在制作声音,但是,无论是否为DB。我相信他们说.Any()只会告诉您是否有任何匹配的记录,而当.Any()没有时,在其中进行实际查询以查找特定值的查询可能为null。
–vapcguy
2014年12月18日下午3:45
该编辑实际上可能是错误的。如果对实体使用linq,则数据库可能会对此进行快捷操作,并且除了true或false之外,没有任何数据发送到客户端。
–Mafii
16年8月15日在13:28
#3 楼
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)
评论
究竟!您会更好地发现结果
– netfed
16年1月8日在6:53
TIL Count()也是一种方法,而不仅仅是属性
–heyNow
16年8月18日在14:13
您不应该使用.Any(),因为count将枚举所有项目吗?
– SHEePYTaGGeRNeP
17年7月22日在8:27
#4 楼
.ToList返回一个空列表。 (与新的List()相同);#5 楼
在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
;)评论
哦,您的解释有助于进一步理解。谢谢 !
–李凯
17年6月16日在1:23
这会回答问题吗?
–首领铅笔
19-10-29在15:01
#6 楼
这里的其他帖子清楚地表明结果是一个“空” IQueryable,它会将ToList()正确更改为一个空列表等。请谨慎使用某些运算符,因为它们如果您向他们发送一个空的枚举,将抛出该异常。将它们链接在一起时,可能会发生这种情况。
评论
“请谨慎对待某些操作员,因为如果将它们发送给空枚举,它们将抛出。将它们链接在一起时,可能会发生这种情况。” -这就是我的意思。我有一个空值,然后将其输入另一个查询。不管我将其强制转换为什么,这都会导致第二个查询抛出,因为没有值被馈送到第二个查询中。
– Trevorc
2011年11月30日在21:11
评论
我猜结果是Enumerable.Empty?