C#中Linq延迟执行问题

一,关于Linq延迟执行问题
var result=from c in Products
           where c.Price>500
           select c;
foreach(Product p in result){
       Console.WriteLine(p.Name);
}
foreach(Product p in result){
       Console.WriteLine(p.Name);
}
   因此,对于上述程序,两个foreach语句会导致查询被执行两次,这种行为被称作
Linq延迟执行。如果使用不当,会导致各种程序效率问题,比如大量的数据绑定如果做得是Linq延迟执行,程序效率将会大大降低。
   改进Linq延迟执行
var result=from c in Products
           where c.Price>500
           select c;
var list=result.ToList<Product>();
foreach(Product p in result){
        Console.WriteLine(p.Name)
}
foreach(Product p in result){
        Console.WriteLine(p.Name)
}
   通过调用ToList或者ToArray方法,可以直接执行Linq查询,将查询结果缓冲再list变量中。从而可以避免Linq延迟执行的效率问题。

   关于Linq中对象引用相等的问题
var result=
    from c in db.Categorys
    from p in c.Products
    where p.ProductId=="FI-01"
    select p;

// 第一次查询
Product p1=null;// 映射数据库中的一行(主键为"FI-01")
foreach(var item in result)
{
    p1=item;
    Console.WriteLine(item.Name);
}

// 第二次查询
Product p2=null;// 映射数据库中的一行(主键为"FI-01")
foreach(var item in result)
{
    p1=item;
    Console.WriteLine(item.Name);
}

Console.WriteLine(p1==p2);// p1与p2引用相等。 p1==p2相当于//object.ReferenceEquals(p1,p2)

posted @ 2009-05-14 19:26  yifan  阅读(2705)  评论(0编辑  收藏  举报