Where和Single之间的区别

时间:2010-07-20 08:17:42

标签: linq

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

Expression传递给单个转发到Where函数吗?

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

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

2 个答案:

答案 0 :(得分:5)

Single会向您返回Person,而Where会返回IEnumerable<Person>

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

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

答案 1 :(得分: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()方法。