2010-11-09 47 views
2

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

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

其中row.B是表'B'的引用。

但是,现在假设'A'和'B'之间存在1:M的关系。上述查询不再有效。看来我需要明确地使用'加入'如下:

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

我的问题是这样的。我纠正1:M关系,'join'是必需的吗?或者有没有办法做这个查询,而不使用连接,就像在1:1的情况下一样?

回答

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()。

+0

我喜欢这个选择。 – 2010-11-09 13:18:32

0

从理论上讲,你应该总是使用加入,如果不出意外,那么对于清晰度和可读性。但在任何1:M的情况下,您需要指定表格之间的关系。就像你在SQL中必须做的一样。

+0

我当然不同意你应该总是使用连接。 Linq的好处之一是只要FKs就位,就可以理解关系。我不明白为什么在1:M关系的情况下,我需要告诉Linq表格是如何关联的。它知道通过FK,就像它知道它在1:1的情况。 – 2010-11-09 12:23:17