2014-06-12 90 views
0

我想加入我的羣組加入頂部的額外表格。下面的代碼工作正常,但評論部分(這當然是無效的)希望給你的想法,我想加入關於ArticleCategories的類別。這反映了DB,因此ArticleCategory對Article(ArticleId)和Category(CategoryId)(非數字化)有兩個外鍵。加入羣組加入

var sql = from a in db.Articles 
    join ac in db.ArticleCategories on a.ArticleId equals ac.ArticleId into acGrouped 
    //join c in db.Categories on acGrouped.CategoryId = c.CategoryId (I want to join within the group) 
    select new 
    { 
     a, 
     acGrouped 
    }; 

當我循環將結果添加到模型時,我想從Category表訪問CategoryName。在第一篇文章:

sql.First().a會給我從第一篇文章

sql.First().acGrouped需要會給我ArticleCategories的集合,從第一篇文章

但如何我得到每各ArticleCategories類別?就像這樣: sql.First().acGrouped.First().Categories.CategoryNamesql.First().acGrouped.First().CategoryName where "CategoryName"只在類別中給我第一篇文章的第一個類別名稱。 (假設收集不是空的)

這將是平凡的結果微不足道,但我希望能夠輸出每篇文章的結果。

回答

1

你應該加入您的文章分類的類別之前,你組其加入到文章,以便將數據由您分組它在你的組加入時已經加入..

+0

這樣嗎?將ac.CategoryId中的db.Categories中的c等於c.CategoryId加入到acGrouped中。這刪除了ArticleCategories,並且由於某種原因該組包含不超過1個類別。 – Parmenides

+0

@Parmenides在加入其中的任何一篇文章之前,加入文章類別*,在*單獨的查詢中加入類別*。然後,您最終將文章加入到已加入的數據集中。 – Servy

+0

試過這個: var joinquery = from ac in db.ArticleCategories.Include(「Categories」) join c in db.Categories on ac.CategoryId equals c.CategoryId select ac; VAR SQL =從在db.Articles 在a.ArticleId joinquery加入公頃等於ha.ArticleId成acGrouped 選擇新 { 一個, acGrouped }; 但包含似乎沒有攜帶的類別 – Parmenides

1

如果我正確理解您的帖子,希望能夠列出與包含關係的聯結表ArticleCategory相關的所有類別。下面應該工作:

var articles = db.Articles; 
var categories = db.Categories; 
var articleCategories = db.ArticleCategories; 

var query = from ac in articleCategories 
    join a in articles on ac.ArticleId equals a.ArticleId 
    join c in categories on ac.CategoryId equals c.CategoryId 
    group c by a.ArticleName into g 
    select new { ArticleName = g.Key, Categories = g.ToList() }; 

下面是該結果的小提琴:https://dotnetfiddle.net/VYBIfY

更新

如果你想獲得更多的性能斷條例如條款ArticleID的,更改組通過關鍵的是有你想要的屬性,像這樣一個新的對象:

var query = from ac in articleCategories 
    join a in articles on ac.ArticleId equals a.ArticleId 
    join c in categories on ac.CategoryId equals c.CategoryId 
    group c by new { a.ArticleId, a.ArticleName } into g 
    select new { Article = g.Key, Categories = g.ToList() }; 
+0

這些都是好的跡象,但是有什麼方法可以訪問Articles或ArticleCategories的附加屬性(例如Articles.ArticleId或ArticleCategories.ArticleId)? – Parmenides

+0

我更新了我的答案,以顯示如何從文章中獲得其他屬性。 –