我正在尝试在群组加入的基础上加入额外的表格。下面的代码工作正常,但注释部分(当然无效)希望能让你想到我想加入ArticleCategories上的Category。这反映了DB,因此ArticleCategory有两个外键到Article(ArticleId)和Category(CategoryId)(unpluralized)。
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的类别?像这样的东西:
sql.First().acGrouped.First().Categories.CategoryName
或sql.First().acGrouped.First().CategoryName where "CategoryName"
仅在类别中,它会为我提供第一篇文章的第一个类别名称。 (假设集合不为空)
这对于平坦的结果来说是微不足道的,但我希望每篇文章都能输出结果。
答案 0 :(得分:1)
您应该将文章类别加入之前的类别,然后将其加入文章,以便在您将其分组到论坛加入时已加入数据。< / p>
答案 1 :(得分: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
<强>更新强>
如果你&#39;想要从文章中获取更多属性,例如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() };