LINQ:如何分组匿名类型

本文关键字:类型 LINQ | 更新日期: 2023-09-27 18:05:42

我需要填充News对象属性和集合。但是我不知道如何通过分组结果来填充它们。

例如如何填写属性CategoryId, CategoryName和CommentBody

我的代码是这样的:

var q = (
    from news in db.News
    from categories in news.Categories
    from comments in news.Comments
    where news.NewsId == 1
    select new { news.NewsId, news.NewsTitle , categories.CategoryId,categories.CategoryName , comments.CommentId, comments.CommentBody }
   ).ToList();
News ne = new News()
{
    NewsTitle = q.Select(w => w.NewsTitle).FirstOrDefault(),
    Categories = q.GroupBy(jj => jj.CategoryName).Select(vv => new Category { CategoryId, CategoryName  }).ToList(),
    Comments = q.GroupBy(ww => ww.CommentBody).Select(b => new Comment {  CommentId , CommentBody }).ToList()
};

LINQ:如何分组匿名类型

GroupBy的结果为IEnumerable<IGrouping<TKey, TItem>>。这是一个可循环的组集,其中每个组都有一个Key,并且本身是一个可循环的源项集。

Categories = q
  .GroupBy(jj => jj.CategoryName)
  .Select(g => new Category
  {
    CategoryId = g.First().CategoryId,
    CategoryName = g.Key
  }).ToList(),

注意:在组上调用First是安全的,因为每个组总是至少有一个成员。