我正在尝试将特定的LINQ结果集排序和分组。

我有两个模型,GalleryMedia。画廊包含媒体。

GalleryMedia对象均由称为SortOrder的键(列)排序。

我正在尝试进行选择,以返回一组画廊中的所有媒体,但是媒体必须是:


GalleryId分组(图库键)
Gallery.SortOrder订购的画廊
Media.SortOrder订购的媒体


因此结果集如下所示:

Gallery 1
Media 1
Media 2
Media 3
Gallery 2
Media 1
Media 2
Media 3
Gallery 3
Media 1
Media 2
Media 3


我目前有:

var EventGalleries = from g in db.Galleries
                     where g.EventId == id
                     orderby g.SortOrder
                     select g.GalleryId;

var EventMedia = from m in db.Media
                 where EventGalleries.Contains(m.GalleryId)
                 orderby m.SortOrder ascending
                 select m;


因此,现在我需要根据EventMedia属性对EventGalleries.SortOrder列表进行重新排序或分组。

EventGalleries数组已经按照正确的顺序排列,我现在确定EventMedia是否将以这种方式正确排序/分组。

最佳答案

您可以尝试使用JoinGroupBy在一个查询中执行此操作:

var result = db.Media
    .OrderBy(m => m.SortOrder)
    .GroupBy(m => m.GalleryId)
    .Join(
        db.Galleries,
        group => group.Key,
        g => g.GalleryId,
        (group, g) => new { Gallery = g, Media = group })
    .OrderBy(x => x.Gallery.SortOrder);


这是working demo

10-07 19:42
查看更多