2010-07-20 83 views
3

我试图找出Where(Expression)和Single(Expression)之间的区别。Where和Single之间的区别

将表达式传递给单个转发给Where函数吗?

例如,这两个表述是否相同?

var result = context.Persons.Single(p => p.ID == 5); 
var result2 = context.Persons.Where(p => p.ID == 5).Single(); 

回答

5

Single回报你一个Person,而Where将返回一个IEnumerable<Person>

将where表达式传递给单个表达式只是语法糖。

这两条线在功能上是等效的。我想象的第一个可能会更有效率。在我看来,这也更容易。

0

虽然有另一个区别。如果所使用的谓词返回多个元素,则Single()将引发异常。如果筛选器应用于枚举值时只返回一个元素,则返回该元素而不抛出异常。

int[] a = {1, 2, 3}; 
var odd_Nos = a.Single(num => num % 2 != 0) // will throw exception (an InvalidOperationException) 
var even_Nos = a.Single(num => num % 2 == 0) // will not throw exception 

如果您只希望第一个出现,您可以使用First()或FirstOrDefault()方法。

相关问题