在lambda表达式中带有Join的Where子句

本文关键字:Join Where 子句 lambda 表达式 | 更新日期: 2023-09-27 18:03:31

我使用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);

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

在lambda表达式中带有Join的Where子句

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

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

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