LINQ:如何对匿名类型进行分组

时间:2016-09-03 11:26:39

标签: c# asp.net-mvc entity-framework linq

我需要填充新闻对象属性和集合。但我不知道通过对结果进行分组来填充它们的正确方法是什么。

例如如何填充属性CategoryId,CategoryName和CommentId,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()
};

1 个答案:

答案 0 :(得分:0)

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是安全的,因为每个组总是至少有一个成员。