在下面的代碼:Linq分組 - <k,v>我的'V'在哪裏?
var finalArticles =
from domainArticle in articlesFoundInDomain
join articleCategoryVersion in dbc.ArticlesCategoriesVersions
on domainArticle.ArticleID equals articleCategoryVersion.ArticleID
join articleCategory in dbc.ArticleCategories
on articleCategoryVersion.CategoryID equals articleCategory.CategoryID
where articleCategory.ParentID == 52
group articleCategory by articleCategory.CategoryID
into newArticleCategoryGroup
據我所知,該組子句應該返回一個IEnumerable其中k是密鑰,在這種情況下類別ID。
我覺得我現在誤解了Linq,因爲我認爲每個'k'都應該有'v'中的文章列表,但我不明白這些機制或術語或其他。當我嘗試將此語句投影到一個新的匿名對象中時,我似乎沒有得到任何文章......他們在哪裏?
編輯: 好了,所以我有一塊正在工作的代碼,但不幸的是它的命中SQL服務器多次:
var articlesAssociatedWithKnowledgeTypes =
from categories in dbc.ArticleCategories
join categoryVersions in dbc.ArticlesCategoriesVersions
on categories.CategoryID equals categoryVersions.CategoryID
join articles in articlesFoundInGivenDomain
on categoryVersions.ArticleID equals articles.ArticleID
where categories.ParentID == 52 && articles.Version == categoryVersions.Version
select new
{
ArticleID = articles.ArticleID,
ArticleTitle = articles.Title,
ArticleVersion = articles.Version,
CategoryID = categories.CategoryID,
CategoryName = categories.Name
} into knowledgeTypesFlat
group knowledgeTypesFlat by new { knowledgeTypesFlat.CategoryID, knowledgeTypesFlat.CategoryName } into knowledgeTypesNested
select new
{
CategoryID = knowledgeTypesNested.Key.CategoryID,
CategoryName = knowledgeTypesNested.Key.CategoryName,
Articles = knowledgeTypesNested.ToList()
};
我認爲ToList()上的文章將排序那出來,但它沒有。但是,代碼的工作原理雖然我不確定這是否是最優的?
'加入into'是不是一個加入,但羣組加入。這是一個加入和分組的組合 –
你能展示你想如何投影你的第一個查詢? – octavioccl
@Dennis_E沒什麼公平的,所以在我的第一個例子結束時,我需要'選擇'以獲得IEnumerable,或者用戶InBetween指出IGroup ,其中K = Category和V = List與K相關的文章? –
Jacques