c# - 如何将 LINQ group 和 ordering 与父表和子表结合起来?

标签 c# linq group-by

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

我有两个模型,GalleryMedia。图库包含媒体。

GalleryMedia 对象均按名为 SortOrder 的键(列)排序。

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

  1. GalleryId(图库键)分组
  2. Gallery.SortOrder 排序的图库
  3. 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;

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

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

最佳答案

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

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 .

关于c# - 如何将 LINQ group 和 ordering 与父表和子表结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20529293/

相关文章:

c# - 提高 Linq SQL 查询性能

PHP消息线程系统

c# - 有没有一种方法可以使用 Roslyn 中的编译对象从引用的程序集中获取程序集级别的属性?

c# - 更改 NHibernate 中的初始 LazyLoad 行为

c# - 展平一个 ObservableCollection

scala - 嵌套数据中深叶上的 FP 或类型级别工具 groupBy?

mysql - 从具有每个不同 candidate_id 的最近日期的行中返回数据

c# - 将 Mysql 数据填充到 asp 日历加载时间太长

c# - 是否可以(以编程方式)证明两个 LINQ 查询相等?

c# - 使用 LINQ 对单个列表中的多个值进行分组和合并