Linq - 加入困惑

时间:2010-11-09 12:09:08

标签: linq linq-to-sql

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

from row in A
where row.B.Description = someValue
select A

其中row.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关系,需要“加入”?或者是否有办法进行此查询,而不使用连接,如1:1的情况?

3 个答案:

答案 0 :(得分:2)

你不必明确加入,选择很多会做的伎俩

from row in A   
from row1 in row.B  
where row1.Description == someValue   
select row  

或者(虽然我真的不喜欢它)

from row in A
where row.B.Any(b => b.Description == someValue)
select row

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

答案 1 :(得分:0)

答案 2 :(得分:0)

理论上,为了清晰和可读性,你应该总是使用Join,如果没有别的话。但在任何1:M的情况下,您需要指定表格如何相互关联。正如您在SQL中所做的那样。