LINQ中两个"where"之间的区别

use*_*560 2 c# linq

请告诉我(1)中"where"和(2)中"where()"之间的区别.

何时使用"where"和"where()"?

List<Person> pList = 
new List<Person>
  {  
       new Person
             {EmpNo=1,FirstName="Marc",LastName="Loel",Salary=3434},

       new Person
             {EmpNo=2, FirstName="Steve",LastName="Kaith",Salary=4545},       

       new Person 
             {EmpNo=3,FirstName="Neol",LastName="Henk",Salary=2222},          

   };

 (1) var v = from p in pList where p.EmpNo == 1 select new { p.FirstName };

 (2)  var query =pList .Where(p => p.EmpNo == 1)
                               .Select(p => new { p.FirstName});
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 25

不同之处在于,一种形式更易于阅读,另一种形式更难以阅读.麻烦的是,大约一半的人认为第一个更容易,一半的人认为第二个更容易!选择你最喜欢的那个并坚持下去; 他们的意思完全相同.

  • 大声笑.+1为机智. (2认同)

Str*_*ior 6

没有真正的区别.第一个where(和select)是一个特殊的语言内查询表达式,由编译器转换为其他基于lambda的Where和Select方法.


BFr*_*ree 5

这只是语法糖.实际上,如果你只有一个具有正确Where方法的类,即使该类不可枚举,你也可以使用语法魔法:

class MyClass
{
    public IQueryable<int> Where(Func<int, bool> predicate)
    {
        return Enumerable.Range(1, 100).AsQueryable();
    }
}

static void Main(string[] args)
{
    var q = from p in new MyClass()
            where p == 10
            select p;      
}
Run Code Online (Sandbox Code Playgroud)

这没有做任何事情,但它构建并将调用该方法.