我有一个关于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();
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非常简单的问题,但我暂时没有VS可用.
lep*_*pie 475
它将返回一个空的可枚举.它不会是空的.你可以睡觉:)
Noi*_*ich 36
您还可以检查.Any()
方法:
if (!YourResult.Any())
Run Code Online (Sandbox Code Playgroud)
只是一个.Any
仍然会从数据库中检索记录的注释; 执行a .FirstOrDefault()/.Where()
将同样需要开销,但您可以捕获从查询返回的对象
JP *_*oto 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
Run Code Online (Sandbox Code Playgroud)
(转储来自LinqPad)
在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
;)
这里的其他帖子已经明确表示结果是一个"空"IQueryable,ToList()将正确地更改为空列表等.
请注意一些操作符,因为如果向它们发送一个空的枚举,它们将抛出.将它们链接在一起时会发生这种情况.
归档时间: |
|
查看次数: |
161746 次 |
最近记录: |