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

时间:2016-07-01 06:16:54

标签: c# linq group-by sql-order-by inner-join

我有两个表: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>>

但如果有必要,可能会改变。

2 个答案:

答案 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));