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

Dav*_*.ca 298 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();
Run Code Online (Sandbox Code Playgroud)

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

lep*_*pie 475

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

  • 仅供参考:您已进入 r/ProgrammerHumor (8认同)
  • 给你:) https://www.reddit.com/r/ProgrammerHumor/comments/pv09ys/googled_this_at_3_am_last_night_the_answer/?utm_source=share&amp;utm_medium=web2x&amp;context=3 (8认同)
  • 链接或者它没有发生:D (4认同)

Noi*_*ich 36

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

if (!YourResult.Any())
Run Code Online (Sandbox Code Playgroud)

只是一个.Any仍然会从数据库中检索记录的注释; 执行a .FirstOrDefault()/.Where()将同样需要开销,但您可以捕获从查询返回的对象

  • 问题在哪里提到数据库? (4认同)
  • 你不得不问一个编辑的人,我没有提到任何DB :) (3认同)
  • 编辑实际上可能是错误的。如果使用 linq to entity,db 可能会对此进行快捷方式,并且除了 true 或 false 之外根本没有数据被发送到客户端 (3认同)

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)

  • 您不应该使用.Any(),因为count会枚举所有项目吗? (2认同)

Pau*_*enk 15

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


kay*_*one 8

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


Jim*_*dra 6

它不会引发异常,您会得到一个空列表。


Spe*_*nce 6

这里的其他帖子已经明确表示结果是一个"空"IQueryable,ToList()将正确地更改为空列表等.

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

  • "请注意一些操作符,因为如果你向它们发送一个空的枚举,它们就会抛出.当你将它们链接在一起时就会发生这种情况." - 这就是我的意思.我有一个null返回值,然后我将其输入另一个查询.这导致第二个查询抛出,无论我把它投射到什么,因为没有值被输入到第二个查询. (3认同)