何时使用lambda而不是LINQtoObjects的扩展方法来过滤集合?

KP.*_*KP. 15 c# linq lambda .net-3.5

我正在对一些C#3集合过滤器进行原型设计并遇到了这个问题.我有一系列产品:

public class MyProduct
{
    public string Name { get; set; }
    public Double Price { get; set; }
    public string Description { get; set; }
}

var MyProducts = new  List<MyProduct>
{            
    new  MyProduct
    {
        Name = "Surfboard",
        Price = 144.99,
        Description = "Most important thing you will ever own."
    },
    new MyProduct
    {
        Name = "Leash",
        Price = 29.28,
        Description = "Keep important things close to you."
    }
    ,
    new MyProduct
    {
        Name = "Sun Screen",
        Price = 15.88,
        Description = "1000 SPF! Who Could ask for more?"
    }
};
Run Code Online (Sandbox Code Playgroud)

现在如果我使用LINQ过滤它按预期工作:

var d = (from mp in MyProducts
             where mp.Price < 50d
             select mp);
Run Code Online (Sandbox Code Playgroud)

如果我使用Where扩展方法结合Lambda,过滤器也可以工作:

var f = MyProducts.Where(mp => mp.Price < 50d).ToList();
Run Code Online (Sandbox Code Playgroud)

问题:有什么区别,为什么使用一个而不是另一个?

ang*_*son 6

LINQ变成了方法调用,就像你拥有的代码一样.

换句话说,应该没有区别.

但是,在你的两段代码中,你没有在第一段中调用.ToList,所以第一段代码会产生一个可枚举的数据源,但是如果你在它上面调用.ToList,那两个应该是相同的.