如果Linq结果为空

soo*_*ise 40 c# linq

如果我有一个看起来像这样的linq查询,我该如何查看查询是否找不到结果?

var LinqResult = 
    from a in Db.Table
    where a.Value0 == "ninja"
    group a by a.Value1 into b
    select new { Table = b};

if(LinqResult.Count() == 0) //?
{

}
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 95

您应该尽量避免使用该Count()方法来检查序列是否为空.Phil Haack 在他的博客上一篇很好的文章,他这篇文章中讨论了这个反模式.

Count() 实际上必须枚举序列的所有元素 - 如果序列基于多个LINQ操作(或来自数据库),这可能是昂贵的.

您应该使用Any()扩展方法 - 它只会尝试查看列表中是否至少有一个元素,但不会枚举整个序列.

if( !LinqResult.Any() )
{ 
   // your code
} 
Run Code Online (Sandbox Code Playgroud)

就个人而言,我也认为使用Any()而不是Count()更好地表达了您的意图,并且将来更容易重构或更改.

顺便说一句,如果你真正想要的是序列的第一个(或唯一的)成员,你应该使用First()Single()运算符.


Yur*_*ich 16

if(!LinqResult.Any()) //?
{

}
Run Code Online (Sandbox Code Playgroud)