2012-04-17 10 views
1

EDIT:LINQ OrderBy/ThenBy ChildrenCollection.SortOrder

この例の両方のクエリは、場所の並べ替え順に並べ替えられていません。誰にどのようにこれを行うにはどのような提案がありますか?

子エンティティ列によるグループのエンティティコレクションの注文には、何か助けが必要です。私はグループから場所への1対1の関係を持っています。

グループをグループ名で、次にロケーションの並べ替え順に並べる必要があります。

子エンティティはコレクションであるため、問題が発生しています。

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

2番目のクエリは、フィールドではなく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