2013-07-09 102 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

相關問題