Linq-连接混淆

Linq-连接混淆,linq,linq-to-sql,Linq,Linq To Sql,对于这个问题,我们假设有表“A”和“B”,它们之间有1:1的关系。在Linq查询中,我可以执行以下操作: from row in A where row.B.Description = someValue select A 其中,行.B是对表“B”的引用 但是,现在让我们假设“a”和“B”之间存在1:M的关系。上述查询不再有效。似乎我需要明确使用“join”,如下所示: from row in A join row1 in B on row.BId = row1.BId where row1.

对于这个问题,我们假设有表“A”和“B”,它们之间有1:1的关系。在Linq查询中,我可以执行以下操作:

from row in A
where row.B.Description = someValue
select A
其中,行.B是对表“B”的引用

但是,现在让我们假设“a”和“B”之间存在1:M的关系。上述查询不再有效。似乎我需要明确使用“join”,如下所示:

from row in A
join row1 in B on row.BId = row1.BId
where row1.Description = someValue
select A
我的问题是。对于1:M的关系,需要“加入”吗?或者有没有办法不使用join(如1:1)进行此查询?

是的,您需要
join

看看下面的内容


理论上,为了清晰易读,如果没有其他选项,那么应该始终使用Join。但在任何1:M的情况下,都需要指定表之间的关系。正如您在SQL中必须做的那样。

您不必显式地加入,选择多个就可以了

from row in A   
from row1 in row.B  
where row1.Description == someValue   
select row  
或者(尽管我真的不喜欢)


对于第一个选项,如果有许多B具有相同的描述,则需要对结果执行Distinct()。

我当然不同意您应该始终使用join。Linq的一个优点是,只要FK就位,就可以理解这些关系。我不太明白为什么,在1:M关系的情况下,我需要告诉Linq这些表是如何关联的。它通过FKs知道这一点,就像它在1:1的情况下知道的一样。既然Linq理解FKs存在所带来的关系,就像它在1:1的情况下所做的一样,为什么1:M需要连接,而不是1:1?
from row in A
where row.B.Any(b => b.Description == someValue)
select row