Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果Linq结果为空_C#_Linq - Fatal编程技术网

C# 如果Linq结果为空

C# 如果Linq结果为空,c#,linq,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) //? { } 您应该尽量避免使用Count()方法来检查序列是否为空。菲尔·哈克(Phil Haack)在其

如果我有一个类似这样的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) //?
{

}

您应该尽量避免使用
Count()
方法来检查序列是否为空。
菲尔·哈克(Phil Haack)在其中讨论了这个反模式

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

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

if( !LinqResult.Any() )
{ 
   // your code
} 
就我个人而言,我还认为使用而不是更好地表达您的意图,并且在将来更容易重构或可靠地更改


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

你为什么要费心搜索忍者?假设你找不到。曾经。尽管文章的见解是
.Any()
只调用
.MoveNext()
一次,但ReSharper(7)会抱怨在使用
.Any()
之后可能会出现多次枚举。也许ReSharper不准确,或者是为了提高效率。@CarlG:并非所有LINQ数据源都是懒惰的,这就是为什么
Any()
可能很昂贵的原因。(例如,在一个
OrderBy
结果上,它不会节省任何时间)
if( !LinqResult.Any() )
{ 
   // your code
}