0

次のコードがあります。

public class Navigation
{
    public Navigation()
    {
        SubNavigation = new List<Navigation>();
    }

    public int Order { get; set; }
    public string Text { get; set; }
    public string RouteName { get; set; }
    public IList<Navigation> SubNavigation { get; set; }
}

私はそれから持っています:

IList<Navigation> list = new List<Navigation>(); 

リストにいくつかのデータを入力します。すべてのアイテムにサブ ナビゲーションがあるわけではありません。現在、ナビゲーションは 1 レベルの深さしかありません。

ここで、各アイテムのナビゲーションとサブナビゲーションの両方を順番に並べ替えたいと思います。私はあらゆる種類のアプローチを試しましたが、何を試しても、オブジェクトを再作成しないとサブナビゲーションを並べ替えることができませんでした。以下のコードが機能します。

IList<Navigation> result = list.OrderBy(l => l.Order)
                               .Select(n => new Navigation
                               {
                                   Order = n.Order,
                                   Text = n.Text,
                                   RouteName = n.RouteName,
                                   SubNavigation = n.SubNavigation.OrderBy(s => s.Order).ToList()
                               }).ToList();

私はこのアプローチが好きではありません.私の質問は、LINQとメソッド構文を使用してこれを行うためのよりクリーンな/より良い方法があるかどうかです?

4

2 に答える 2

1

オブジェクトに新しいプロパティを追加できます。

public IList<Navigation> OrderedSubNavigation 
{ 
    get
    {
        return SubNavigation.OrderBy(s => s.Order).ToList();
    }

}

次に、注文したものが必要な場合は、それを使用します。

于 2012-10-09T13:30:59.500 に答える
0

I have tried all kinds of approaches but no matter what I tried I could not get the sub-navigation to sort without re-creating the object.

Well no, you wouldn't be able to cleanly - because getting the subnavigation to be in a particular order requires modifying the existing object, and LINQ's not built for that. LINQ's built for queries, which shouldn't mutate the data they work on.

One option would be to only sort the subnavigation when you need to - live with the fact that it's unordered within a Navigation, and then when you actually need the subnavigation items (e.g. for display) you can order at that point. Aside from anything else, this will make it more efficient if you end up not displaying the subnavigation items.

于 2012-10-09T13:17:45.113 に答える