如果Linq结果为空

时间:2010-07-15 20:43:38

标签: 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) //?
{

}

2 个答案:

答案 0 :(得分:92)

您应该尽量避免使用Count()方法来检查序列是否为空。 Phil Haack已经an excellent article on his blog讨论了这个反模式。

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

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

if( !LinqResult.Any() )
{ 
   // your code
} 

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

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

答案 1 :(得分:16)

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

}