代码之家  ›  专栏  ›  技术社区  ›  Anemoia

Where和Single之间的差异

  •  3
  • Anemoia  · 技术社区  · 14 年前

    我正在试图找出在哪里(表达式)和单个(表达式)之间的区别。

    是否将表达式传递给single并转发给where函数?

    这两种说法相同吗?

    var result = context.Persons.Single(p => p.ID == 5);
    var result2 = context.Persons.Where(p => p.ID == 5).Single();
    
    2 回复  |  直到 13 年前
        1
  •  5
  •   Richard Ev    14 年前

    Single 还给你A Person Where 会给你一个 IEnumerable<Person> .

    将where表达式传递到single中只是语法上的糖分。

    这两条线在功能上是等效的。我想,第一次的效率可能会稍微高一点。在我看来,眼睛也比较容易。

        2
  •  0
  •   gprasant    13 年前

    不过还有另一个区别。如果使用的谓词返回多个元素,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()方法。