問題

我正在原型一些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?"
    }
};
 

現在如果我使用LINQ過濾它按預期工作:

 var d = (from mp in MyProducts
             where mp.Price < 50d
             select mp);
 

如果我使用Where擴充套件方法與Lambda結合,過濾器也可以工作:

 var f = MyProducts.Where(mp => mp.Price < 50d).ToList();
 

問題:有什麼區別,為什麼使用一個而不是另一個?

  最佳答案

LINQ變成了方法呼叫,如您所擁有的程式碼。

換言之,不應有任何區別。

但是,在您的兩段程式碼中,您沒有在第一個中呼叫.ToList,因此第一段程式碼將生成一個可列舉的資料來源,但如果您在其上呼叫.ToList,兩者應該相同.

  相同標籤的其他問題

c#linq.net-3.5lambda