【问题标题】:What is difference between Where and Join in linq?linq中的Where和Join有什么区别?
【发布时间】:2010-06-10 09:06:52
【问题描述】:

这两个查询有什么区别?他们完全平等?

from order in myDB.OrdersSet
    from person in myDB.PersonSet
    from product in myDB.ProductSet
    where order.Persons_Id==person.Id && order.Products_Id==product.Id
    select new { order.Id, person.Name, person.SurName,  product.Model,UrunAdı=product.Name };

from order in myDB.OrdersSet
    join person in myDB.PersonSet on order.Persons_Id equals person.Id
    join product in myDB.ProductSet on order.Products_Id equals product.Id
    select new { order.Id, person.Name, person.SurName,  product.Model,UrunAdı=product.Name };

【问题讨论】:

  • 您为什么将问题标记为“实体框架”?也许您在实体框架中使用 linq,但这是一个一般的 linq 问题,而不是 ef。
  • 是的,我想你所说的。我不是专家,当我开始学习实体框架时,我从未使用过加入普通的 linq 查询,我看到它并认为加入方法可以依赖于 EF .现在我知道这不是 EF 问题,所以我现在要删除该标签。

标签: linq join where


【解决方案1】:

最终结果应该是一样的。

但是使用JOIN 更清晰 - 你在做什么更明显(连接三组数据)。

我个人的“最佳实践”方法是:

  • 使用WHERE 减少和限制返回的行数 - 它通常限制一组数据(通过定义要满足的一些条件)

  • 使用JOIN 表示将两个表/数据集连接到一个公共字段(或一组字段)上的意图

【讨论】:

    【解决方案2】:

    Join 显示表格之间的关系更清晰,击键次数也更少。

    【讨论】:

    • 这与 LINQ 理念相得益彰:更喜欢代码清晰而不是执行速度。尤其是在更清晰的代码中没有速度损失的情况下,当然:-)
    • 这些清晰性可能会引起我所问的问题。因为如果加入的所有工作都在哪里,那么它们之间有什么区别。如果没有区别,那么为什么存在加入:)
    • 清楚的是,当您使用连接时,您使用的是更高的抽象。然而,“where”是它的底层实现。此外,这不是 linq 的 where 和 join 风格。这是因为sql两者都有。
    • Join 在“where”没有限制的情况下对表关系有限制。这会产生问题。 Join 只接受 "Equals" 运算符,而 "where" 支持许多逻辑运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多