2009-08-20 8 views
8

LINQでOrderByを実行し、次にThenByで親オブジェクトの子を使用してセカンダリ注文を行う方法はありますか?LINQ OrderBy Name ThenBy ChildrenCollection.Name

_repository.GetActiveDepartmentGroupsWithDepartments().OrderBy(c => c.DepartmentGroupName).ThenBy(c => c.Departments.OrderBy(d => d.DepartmentName)) 

上記の場合、c.DepartmentsはEntityCollectionです。ところで

:私は上記を試した後、ToListメソッドを(行う)、その上に、私はこのエラーを取得する:任意の助けや指導を事前に

DbSortClause expressions must have a type that is order comparable. 
Parameter name: key 

感謝。

答えて

17

グループ名で注文したすべての部門のリストを取得しようとしているようです。 Deparmentが集まりですので、あなたがそれを使用するスカラーにそれを変換する必要があり

var res = _repository.GetActiveDepartmentGroupsWithDepartments() 
        .SelectMany(c => c.Departments, (c,d) => new { c, d }) 
        .OrderBy(x => x.c.DepartmentGroupName) 
        .ThenBy(x => x.d.DepartmentName) 
        .Select(x => x.d); 
2

var res = from c in _repository.GetActiveDepartmentGroupsWithDepartments() 
      from d in c.Departments 
      orderby c.DepartmentGroupName, d.DepartmentName 
      select d; 

またはメソッドの構文で:もしそうなら、あなたはおそらくこのような何かをしたいですソート。

1つのオプションは、コレクション内の単一のエンティティを選択することです。最初の部門の名前:

_repository.GetActiveDepartmentGroupsWithDepartments() 
    .OrderBy(c => c.DepartmentGroupName) 
    .ThenBy(c => c.Departments 
     .OrderBy(d => d.DepartmentName) 
     .FirstOrDefault() 
     .DepartmentName 
    ) 

もう1つのオプションは、コレクション自体のプロパティで注文することです。部門数:

_repository.GetActiveDepartmentGroupsWithDepartments() 
    .OrderBy(c => c.DepartmentGroupName) 
    .ThenBy(c => c.Departments.Count()) 
関連する問題