LINQ查询在子表中按列分组,并在组内排序结果



我有两个表:资源和资源类别。为了解决这个问题,它们可以简单地具有以下结构:

资源
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>>

,但如果有必要,可以修改

你可以做到这一点,首先排序你的列表,然后分组

_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));

相关内容

  • 没有找到相关文章