LINQ 查询按子 table 中的列分组并在组内对结果进行排序
LINQ query grouping by column in child table and ordering the results within the groups
我有两个表:Resources 和 ResourceCategories。为了这个问题,他们可以简单地具有以下结构:
资源
public long Id { get; set; }
public string DisplayText { get; set; }
public long CategoryId { get; set; }
public virtual ResourceCategory ResourceCategory { get; set; }
资源类别
public long Id { get; set; }
public string Name { get; set; }
我想要 return 按资源类别 Name
分组并按每个组中的资源 DisplayText
排序的资源列表。我可以轻松地进行分组,但我无法计算出顺序。
我基本上想要:
Resource Category 1
Resource A
Resource D
Resource K
Resource Category 2
Resource C
Resource F
Resource M
...
分组的代码很简单:
model.CategorisedResources = _db.Resources
.GroupBy(r => r.ResourceCategory.Name);
如何实现资源DisplayText
对每个组的排序?
请注意,模型的 CategorisedResources
属性 当前类型为:
IEnumerable<IGrouping<string, Resource>>
但如有必要,这可能会有所改变。
您可以通过先对列表进行排序然后对其进行分组来实现此目的
_db.Resources
.OrderBy(r=>r.DisplayText).ToList()
.GroupBy(r => r.ResourceCategory.Name);
为了指定组内的排序顺序,您可以为 GroupBy
方法指定 resultSelector
参数:
model.CategorisedResources = _db.Resources.GroupBy(r =>
r.ResourceCategory.Name, (catName, catRes) => catRes.OrderBy(cr => cr.DisplayText));
我有两个表:Resources 和 ResourceCategories。为了这个问题,他们可以简单地具有以下结构:
资源
public long Id { get; set; }
public string DisplayText { get; set; }
public long CategoryId { get; set; }
public virtual ResourceCategory ResourceCategory { get; set; }
资源类别
public long Id { get; set; }
public string Name { get; set; }
我想要 return 按资源类别 Name
分组并按每个组中的资源 DisplayText
排序的资源列表。我可以轻松地进行分组,但我无法计算出顺序。
我基本上想要:
Resource Category 1
Resource A
Resource D
Resource K
Resource Category 2
Resource C
Resource F
Resource M
...
分组的代码很简单:
model.CategorisedResources = _db.Resources
.GroupBy(r => r.ResourceCategory.Name);
如何实现资源DisplayText
对每个组的排序?
请注意,模型的 CategorisedResources
属性 当前类型为:
IEnumerable<IGrouping<string, Resource>>
但如有必要,这可能会有所改变。
您可以通过先对列表进行排序然后对其进行分组来实现此目的
_db.Resources
.OrderBy(r=>r.DisplayText).ToList()
.GroupBy(r => r.ResourceCategory.Name);
为了指定组内的排序顺序,您可以为 GroupBy
方法指定 resultSelector
参数:
model.CategorisedResources = _db.Resources.GroupBy(r =>
r.ResourceCategory.Name, (catName, catRes) => catRes.OrderBy(cr => cr.DisplayText));