相关疑难解决方法(0)

LINQ:何时使用SingleOrDefault与FirstOrDefault()一起使用过滤条件

考虑IEnumerable扩展方法SingleOrDefault()FirstOrDefault()

MSDN文件表明SingleOrDefault:

返回序列的唯一元素,如果序列为空,则返回默认值; 如果序列中有多个元素,则此方法抛出异常.

FirstOrDefault从MSDN(推测当使用OrderBy()OrderByDescending()或根本没有),

返回序列的第一个元素

考虑一些示例查询,并不总是清楚何时使用这两种方法:

var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE

var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?

var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?
Run Code Online (Sandbox Code Playgroud)

你遵循或暗示什么约定决定要使用时SingleOrDefault(),并FirstOrDefault()在您的LINQ查询?

.net linq linq-to-sql

487
推荐指数
8
解决办法
27万
查看次数

LINQ Any vs FirstOrDefault的性能!= null

我提供的开源项目(OSP)代码中有多个位置,必须确定集合中的元素是否满足某个条件.

我已经看到Any(lambda expression)在某些情况下和FirstOrDefault(lambda expression) != null其他情况下使用LINQ表达式,但从未考虑过它.

我现在已达到这样的程度,我必须对从查询到数据库的集合进行一些迭代,并希望优化运行时.

所以我认为FirstOrDefault(lambda expression) != null应该比这更快Any(lambda expression),对吧?

在这种情况下FirstOrDefault(lambda expression) != null,迭代(可能)在找到满足条件的元素时停止(更糟糕的情况是它遍历整个集合并返回null).

Any(lambda expression)我想象的情况下,即使找到满足条件的元素,迭代也会继续到集合的末尾.

编辑:以上情况并非如杰克逊教皇提到并链接相关的MSDN文章.

我的想法是正确的还是我错过了什么?

c# linq

39
推荐指数
3
解决办法
3万
查看次数

标签 统计

linq ×2

.net ×1

c# ×1

linq-to-sql ×1