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 有 an excellent article on his blog他在其中讨论了这种反模式。

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

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

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

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

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

关于c# - 如果 Linq 结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259895/

相关文章:

c# - LINQ Min() 和 Max() 优化

c# - 使用扩展方法重写以下 LINQ 语句的优雅方法是什么?

c# - ASP.NET Core错误开发模式仅在Area中

c# - 如何解决 Entity Framework 中的内存不足异常错误?

c# - 如何不使用 MVVM UI 模式的默认构造函数?

.net - 不区分大小写的字符串与 linq-to-sql 和 linq-to-objects 进行比较

c# - 如何向程序集添加上下文帮助

c# - 多线程和委托(delegate)调用

c# - 按属性和这些属性的有序数组对 IEnumerable<Object> 进行排序

c# - 检查值是否存在于 linq 中