2

Univers でグループ化され、Univers 名で並べ替えられたカテゴリのリストを返すクエリがあります。結果のリストもカテゴリ名 (C.Name) で並べ替えたいと思います。これが私の 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();
   }

結果に orderby がある場合に、group by がどのように適用されるかを理解したいと思います。

4

1 に答える 1

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)
            };
于 2013-07-09T13:45:46.577 に答える