2012-02-16 729 views
0

我使用EF 4.1,其中三個表映射爲m-n關係。我是Linq的新手,所以對你們大多數人來說這將是一件容易的事。查詢與LINQ的多對多關係

表是用戶 - > Users_Rights_Map - >版權

...經典的M-N。

例如,我想查找所有RightID爲1的用戶。

var r = from u context.Users 
    where u.Rights.Select(r => r.RightID == 1) 
    select u; 

...不起作用。

正確的LINQ查詢是什麼樣的?

回答

4

你的查詢語法錯誤(in是不是在你的查詢),你應該使用不使用select使病情一些有條件的功能。

var r = from u in context.Users 
    where u.Rights.Any(r => r.RightID == 1) 
    select u; 

編輯:對LINQ啓動和培訓,我認爲是很好的爲你看到101 linq sample。 對於Any您可以看到量詞,有樣品,如Any,All。特別你的情況包括在那裏。

+0

謝謝。我有101 Linq的樣本,還沒有看到或理解Any()。 – John 2012-02-16 09:19:10

+0

@John,有一些這樣的運算符,而不是任何你可以使用'FirstOrDefaul(r => r.RightID == 1)!= null'它將被轉換成完全相同的sql查詢,實際上'Any'搜索對於某些具有特定條件的項目的存在,「FirstOrDefault」,找到具有特定條件的項目,並且如果將FirstOrDefault轉換爲bool,則它將與「Any」相同。 – 2012-02-16 09:25:32

+0

好的答案!!!!狂歡! – hsalimi 2012-02-16 15:34:11

4

嘗試

var users = from u in context.Users 
    where u.Rights.Any(r => r.RightID == 1) 
    select u; 
+0

這不是可編譯的。 – 2012-02-16 09:01:16

+0

@SaeedAmiri你能解釋一下你的意思嗎? – Eranga 2012-02-16 09:19:57

+0

這意味着你應該改變:從u context.Users到u from context.Users' – 2012-02-16 09:22:01