Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linq中Where和Join的区别是什么?_Linq_Join_Where - Fatal编程技术网

在linq中Where和Join的区别是什么?

在linq中Where和Join的区别是什么?,linq,join,where,Linq,Join,Where,这两个查询之间有什么区别?他们完全平等 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.SurNa

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

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


最终结果应该是一样的

但是使用
JOIN
更清楚——你正在做的事情更明显(连接三组数据)

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

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

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


最终结果应该是相同的

但是使用
JOIN
更清楚——你正在做的事情更明显(连接三组数据)

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

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

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


Join显示了表更清晰和按键次数更少之间的关系。

Join显示了表更清晰和按键次数更少之间的关系。

为什么将问题标记为“实体框架”?也许您正在实体框架中使用linq,但这是一个一般的linq问题,而不是ef。是的,我想到了你所说的。我不是专家,在我开始学习实体框架时,我从来没有在普通linq查询中使用过连接。我看到了它,认为连接方法可以依赖于EF。现在我明白了这不是EF问题,所以我现在要删除该标记。为什么你将该问题标记为“实体框架”?也许您正在实体框架中使用linq,但这是一个一般的linq问题,而不是ef。是的,我想到了你所说的。我不是专家,在开始学习实体框架时,我从未使用过加入普通linq查询。我看到了实体框架,并认为加入方法可以依赖于EF。现在我明白了这不是EF问题,所以我现在删除了该标记。这与linq的理念是一致的:宁愿代码清晰而不是执行速度。特别是当清晰的代码中没有速度损失时,当然:-)这些清晰性可能会引起我所问的问题。因为如果连接的所有工作都在哪里,那么它们之间的区别是什么。如果没有区别,那么为什么连接存在:)清晰性是,当使用连接时,使用更高的抽象。然而,“where”是它的底层实现。而且,这不是linq的where和join风格。这是因为sql同时具有这两个属性。当“where”没有时,Join对表关系有限制。这会产生问题。Join只接受“Equals”运算符,而“where”支持许多逻辑运算符。这符合LINQ的理念:宁愿代码清晰,也不愿意执行速度快。特别是当清晰的代码中没有速度损失时,当然:-)这些清晰性可能会引起我所问的问题。因为如果连接的所有工作都在哪里,那么它们之间的区别是什么。如果没有区别,那么为什么连接存在:)清晰性是,当使用连接时,使用更高的抽象。然而,“where”是它的底层实现。而且,这不是linq的where和join风格。这是因为sql同时具有这两个属性。当“where”没有时,Join对表关系有限制。这会产生问题。Join只接受“Equals”运算符,而“where”支持许多逻辑运算符。
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 };