我正试图找出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();
答案 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()方法。