2010-11-09 49 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