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

在LINQ上下文中,术语“延迟查询评估”是指什么?

  •  2
  • user215675  · 技术社区  · 15 年前

    在LINQ上下文中,术语“延迟查询评估”是指什么?(请举例说明)。

    3 回复  |  直到 15 年前
        1
  •  4
  •   tvanfosson    15 年前

    对于LINQ,在实际枚举结果之前,不会计算生成的查询。构造查询时所要做的就是构建表达式树、委托序列或使用其他语言构造(如yield语句)将执行延迟到稍后。在需要查询结果之前,表达式树(委托/收益)不会导致实际查询。这允许您构建一个查询,直到最后一个可能的时刻才对其进行计算,从而使结果集尽可能小。例如,在Linq to SQL中,我们有:

    // no query is executed by this statement
    var query = from product in db.Products
                select product;
    
    
    // a select count(*) from Products is executed by this statement
    var productCount = query.Count();
    
    // a select ... from Products where ID == 3 is executed by this statement
    var products = query.First( p => p.ID == 3);
    
    
    // a select .. from Products is executed by this statement
    foreach (var product in query)
    {
       ...
    }
    

    关于这一点,我们可以在 http://language-integrated-query.com/Linq_Deffered_Query.aspx http://msdn.microsoft.com/en-us/library/bb308959.aspx .

        2
  •  3
  •   David Basarab    15 年前

    延迟的计算意味着在使用该项之前,Linq to SQL不会转到SQL Server数据库。

    您有一个数据库表。称它为用户。

    如果你这样做。

    var userList = myDataContext.User;
    

    您尚未访问数据库。

    当你做类似的事情时。

    foreach(var item in userList)
    {
       //  do something with item
    }
    

    当foreach获取用户列表的枚举器时,也就是它进入数据库执行时的枚举器。

    因此,它将评估推迟到客户机代码使用它为止。