2009-08-20 3 views
8

LINQ에서 OrderBy를 수행하고 ThenBy로 부모 개체의 하위 항목을 사용하여 보조 주문을 수행하는 방법이 있습니까?LINQ OrderBy 이름 ThenBy ChildrenCollection.Name

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

위의 경우, c.Departments는 EntityCollection이다.

은 BTW : 어떤 도움이나 안내를 사전에

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

감사 : 나는 위의를 시도하고 다음() 그것에 ToList을 수행 할 때,이 오류가 발생합니다.

답변

17

그룹별로 주문한 모든 부서 목록을 얻으려는 것 같습니다. 그렇다면, 당신은 아마 이런 식으로 뭔가를하고 싶지 :

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

또는 메서드 구문에

:

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

DEPARTMENT = 콜렉션이기 때문에, 당신이 그것을 사용하는 스칼라로 변환해야 정렬.

하나의 옵션은 컬렉션에서 단일 항목을 선택하는 것입니다 (예 : 첫 번째 부서의 이름 :

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

또 다른 옵션은 컬렉션 자체의 속성으로 주문하는 것입니다. 부서 수 :

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