我有两个表:Resources和ResourceCategories。为了这个问题,他们可以简单地具有以下结构:
资源
public long Id { get; set; }
public string DisplayText { get; set; }
public long CategoryId { get; set; }
public virtual ResourceCategory ResourceCategory { get; set; }
ResourceCategory
public long Id { get; set; }
public string Name { get; set; }
我想返回按资源类别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>>
但如果有必要,可能会改变。
答案 0 :(得分:1)
您可以先对列表进行排序然后将其分组
来实现此目的_db.Resources
.OrderBy(r=>r.DisplayText).ToList()
.GroupBy(r => r.ResourceCategory.Name);
答案 1 :(得分:0)
为了指定组中的排序顺序,您可以为resultSelector
方法指定GroupBy
参数:
model.CategorisedResources = _db.Resources.GroupBy(r =>
r.ResourceCategory.Name, (catName, catRes) => catRes.OrderBy(cr => cr.DisplayText));