2013-12-10 149 views
1

如何在LINQ中將以下SQL寫入實體?我試圖讓所有用戶訪問使用論壇組分配的論壇。Linq to Entities Relationship加入

SELECT UsersInForumGroups.UserId FROM Forums 
JOIN ForumsInForumGroups on Forums.ForumId = ForumsInForumGroups.ForumId 
JOIN ForumGroups on ForumGroups.ForumGroupId = ForumsInForumGroups.ForumGroupId 
JOIN UsersInForumGroups on UsersInForumGroups.ForumGroupId = ForumGroups.ForumGroupId 
WHERE Forums.ForumId = 'blah' 

我有使用SQL外鍵設置的所有關係,它們在實體框架中工作,例如,這個語法正在工作。

db.ForumsInForumGroups.Select(x=>x.ForumGroup) 

如這裏要求是實體設置

enter image description here

enter image description here

+0

我認爲在LINQ實體你不需要創建一個連接查詢,因爲所有有關係的表都是自連接。所以只需要從父表獲得值,孩子會很容易從他們身上獲得。像'parenttablename.Childtable.fieldname' – Rahul

+0

你需要發佈你的實體的樣子。 –

回答

1

假設你有一個多到一個你tabels之間的關係,也可能是這樣的:

var res = db.Forums.Include("ForumsInForumGroups.ForumGroups.UsersInForumGroups") 
      .Where(c => c.ForumId == "blah") 
      .Select(c => c.ForumsInForumGroups 
          .ForumGroups 
          .UsersInForumGroups 
          .UserId) 

編輯
沒有必要爲Include,那麼你通過關係選擇:

var res = db.Forums.Where(c => c.ForumId == "blah") 
      .Select(c => c.ForumsInForumGroups 
          .ForumGroups 
          .UsersInForumGroups 
          .UserId) 

編輯2
我是一個大膽的assumsion :)
試試這個:

var res = db.Forums.Where(c => c.ForumId == "blah") 
      .SelectMany(c => c.ForumsInForumGroups 
          .SelectMany(q => q.ForumGroups.UsersInForumGroups 
           .Select(z => z.UserId) 
            ) 
         ); 
+0

使用第二種解決方案我得到 錯誤'System.Data.Objects.DataClasses.EntityCollection '不包含'ForumGroups'的定義,也沒有接受第一個參數類型的擴展方法'ForumGroups' 'System.Data.Objects.DataClasses.EntityCollection '可以找到(你是否缺少使用指令或程序集引用?) SQL服務器上的關係似乎都是正確的,即所有的一對一多少,沒有很多manys。 E.g.一個ForumGroups可能有很多ForumsInForumGroups – Hoody

+0

@spangeman我更新了我的答案 –