具有Join in lambda表达式的Where子句

时间:2015-07-18 09:20:44

标签: c# entity-framework lambda

我正在使用带有Join的Where子句的Lambda表达式。这是我的查询

 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);

哪一个更快?虽然我注意到两者都给出了相同的输出,但哪种方法是正确的?

1 个答案:

答案 0 :(得分:2)

使用第一个查询,where子句在数据库服务器上执行,而第二个查询则在客户端计算机上执行。因此,使用第一个查询:

  • 数据库服务器做得更多;
  • 客户端计算机的工作量较少;
  • 从服务器向客户端传输的数据较少;

和第二个问题恰恰相反。很难说哪个会更快。大多数情况下,您的第一个查询运行得更快,因此更受欢迎,但我已经看到过像第二个查询运行得更快的情况。