2012-04-17 2 views
1

편집 :이 예에서는LINQ있는 OrderBy/ThenBy ChildrenCollection.SortOrder

두 쿼리가 위치 정렬 순서에 의해 주문되지 않습니다. 누구든지이 작업을 수행하는 방법에 대한 제안이 있습니까?

하위 엔터티 열에 의해 그룹의 엔터티 컬렉션을 주문하는 데 도움이 필요합니다. 나는 그룹과 장소에서 일대 다 관계를 맺고 있습니다.

그룹을 그룹 이름순으로 정렬 한 다음 위치 정렬 순서로 정렬해야합니다.

하위 항목이 모음이므로 문제가 발생했습니다. 여기

내가 그 작동 사용하고 코드입니다하지만 중복 반환 : 그런 다음

var groups = db.GetNavigationGroups() 
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true) 
    .SelectMany(g => g.NavigationGroupLocations, (g, l) => new { g, l }) 
    .OrderBy(x => x.g.Name) 
    .ThenBy(x => x.l.SortOrder) 
    .Select(x => x.g); 

내가 FirstOrDefault를 사용하여이 방법을() 시도를 :

List<NavigationGroup> groups = db.DataModel.NavigationGroups 
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true) 
    .OrderBy(g => g.Name) 
    .ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault()) 
    .ToList(); 

문제는 내가 얻을 수없는 것이다 그룹을 SortOrder 열 위치를 기준으로 정렬해야합니다.

답변

1

두 번째 쿼리는 필드 대신 NavigationGroupLocations 개체를 기준으로 정렬하려는 것 같습니다. 시도해 보셨습니까 :

List<NavigationGroup> groups = db.DataModel.NavigationGroups 
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true) 
.OrderBy(g => g.Name) 
.ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder) 
.ToList(); 

선택 조항을 조건 절에 추가 할 수도 있습니다.

List<NavigationGroup> groups = db.DataModel.NavigationGroups 
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true) 
.OrderBy(g => g.Name) 
.ThenBy(g => g.NavigationGroupLocations.Where(l => selectedLocation > 0 ? l.Location == selectedLocation : true && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder) 
.ToList(); 
+0

굉장합니다. 고맙습니다! – Jared