2012-10-16 77 views
0

我使用EF5與.net 4.0,我有3個實體 - 用戶,項目和興趣。我連接用戶Many2Many興趣和項目Many2Many興趣使用FluentAPI(它爲每個關係創建額外的2個表)。一切都很好。建立與EF的多對多查詢

我想要做的是加載每個用戶具有相同的興趣的所有項目。我試過

Project ... 
    .Where(p => p.Interests 
       .Any(t => user.Interests.All(i => i.Url == t.Url))); 

(興趣有PK網址)。當我執行此查詢時,出現錯誤

無法創建類型爲'DAL.Models.Interest'的常量值。只有原始類型或枚舉類型在此上下文中受支持。

什麼是正確的查詢?

+1

你能澄清你想查詢返回什麼嗎?您希望您的環境中的所有項目與特定用戶分享任何興趣? –

+0

是的,那是我想要的結果。 – FrEaKmAn

回答

0

問題是你不能將user.Interests.All(...)轉換成一個SQL過程。

但是,您可以創建基本類型(Url)的列表,然後與其進行比較。

 var userInterests = user.Interests.Select(u => u.Url); 
     var sharedProjects = m.Projects.Where(p => p.Interests.Select(i => i.Url) 
        .Any(pi => userInterests.Any(ui => ui == pi)));