【问题标题】:Where clause with Join in lambda expression在 lambda 表达式中使用 Join 的 Where 子句
【发布时间】:2015-07-20 14:33:03
【问题描述】:

我将 Lambda 表达式用于 Where 子句和 Join。这是我的查询

 var ActiveImages = db.tbl_Advertise
    .Where(i => i.IsVisible == true)
    .Join(db.tbl_ShopMast.Where(i => i.IsVisible == true && i.fk_userID == userid),
        i => i.fk_shop_id,
        j => j.ShopID,
        (i, j) => new { Advertise = i, Shop = j})
    .ToList();

或者我什至可以将此查询正确为:

var ActiveImages = db.tbl_Advertise
    .Join(db.tbl_ShopMast.Where(i => i.IsVisible == true && i.fk_userID == userid),
        i => i.fk_shop_id,
        j => j.ShopID,
        (i, j) => new { Advertise = i, Shop = j})
    .ToList()
    .Where(i=>i.Advertise.IsVisible == true);

哪个工作得更快?虽然我注意到两者都给出相同的输出,但哪种方式是正确的?

【问题讨论】:

    标签: c# entity-framework lambda


    【解决方案1】:

    对于您的第一个查询,where 子句在数据库服务器上执行,而对于您的第二个查询,它在您的客户端计算机上执行。因此,对于第一个查询:

    • 数据库服务器做更多的工作;
    • 客户端机器做的工作更少;
    • 从服务器传输到客户端的数据更少;

    第二个查询正好相反。很难说哪个会更快。大多数情况下,您的第一个查询会运行得更快,因此是首选,但我见过像您的第二个查询这样的查询运行得更快的场景。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2010-12-17
      • 1970-01-01
      • 2017-05-29
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多