2013-07-09 104 views
2

我有一个查询返回一个按Univers分组并按Univers名排序的分类列表。我想结果也被类别名称(C.Name)有序列表,这里是我的Linq查询:如何对LINQ查询分组结果进行排序

public static IEnumerable<IGrouping<String, String>> GetCatalogUnivCateg(){ 
    var contexte = new AV2_Entities(); 
    var query = from C in contexte.Category 
      group C.Name by C.Univers.Name into g 
      orderby g.Key 
      select g; 
    return query.ToList(); 
    } 

我想了解如何应用组通过,当结果有一个排序依据。

回答

2

添加顺序进行选择时组:

var query = from c in contexte.Category 
      group c by c.Univers.Name into g 
      orderby g.Key 
      select g.OrderBy(x => x.Name) // sort by name 
        .Select(x => x.Name); // project if you need just names 

可惜你不能,如果你是从方法返回IGrouping返回排序的结果。另外IGrouping实现是内部的,所以你不能只返回一些新的分组对象。我建议你创建DTO类,如:

public class UniversCategories 
{ 
    public string UniversName { get; set; } 
    public IEnumerable<string> Categories { get; set; } 
} 

而且从你的方法返回这个类的实例

var query = from c in contexte.Category 
      group c by c.Univers.Name into g 
      orderby g.Key 
      select new UniversCategories { 
       UniversName = g.Key, 
       Categories = g.Select(x => x.Name).OrderBy(n => n) 
      }; 
+0

感谢我了解后选择的排序依据,但我困惑的投影,因为我想要获得IEnumerable > – Bro

+0

@Bro为什么需要'IGrouping'类型?这将返回'IEnumerable '如果您还需要键,您可以选择匿名类型'选择新{UniversName = g.Key,Categories = g.OrderBy(x => x.Name).Select(x => x.Name )}'(我会用此代码更新答案) –

+1

非常感谢!我知道了 – Bro

相关问题