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 列に基づいて必要な順序でグループを取得できないように見えることです。

4

1 に答える 1

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();

selectedLocation 条件を order 句に追加することもできます。

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();
于 2012-04-17T16:59:56.617 に答える