2017-10-23 12 views
1

私は以下のネストされたクラスを持っています。私はDisplayOrderフィールド上の適切な場合には、各レベルでの並べ替えしようとしています私がして、各レベルでソートされたすべてのデータを返すために苦労していますネストしたコレクションをLinqでソートする

public class Menu 
    { 
     public virtual string MenuDescription { get; set; } 
     public virtual bool Active { get; set; } 
     public virtual short SiteId { get; set; } 
     public virtual IEnumerable<MenuHeader> MenuHeaders { get; set; } 
    } 

    public class MenuHeader 
    { 
     public virtual string HeaderName { get; set; } 
     public virtual string Url { get; set; } 
     public virtual string DisplayOrder { get; set; } 
     public virtual IEnumerable<MenuCategory> MenuCategories { get; set; } 
    } 

    public class MenuCategory 
    { 
     public virtual string Name { get; set; } 
     public virtual string Icon { get; set; } 
     public virtual string Url { get; set; } 
     public virtual string DisplayOrder { get; set; } 
     public virtual IEnumerable<MenuOptionHeader> MenuOptionHeaders { get; set; } 
    } 

public class MenuOptionHeader 
    { 
     public virtual string Name { get; set; } 
     public virtual string Url { get; set; } 
     public virtual string DisplayOrder { get; set; } 
     public virtual IEnumerable<MenuOption> MenuOptions { get; set; } 
    } 

public class MenuOption 
    { 
     public virtual string Name { get; set; } 
     public virtual string Url { get; set; } 
     public virtual string DisplayOrder { get; set; } 
    } 

DisplayOrder

私は

menuRepository.GetAll(x => x.SiteId == _siteConfiguration.Id && x.Active == true) 
       .SelectMany(x => x.MenuHeaders.OrderBy(d => d.DisplayOrder)) 
       .SelectMany(x1 => x1.MenuCategories.OrderBy(o => o.DisplayOrder)) 
       .SelectMany(x2 => x2.MenuOptionHeaders.OrderBy(o => o.DisplayOrder)); 
ような何かをしようとしていました

これは、パーツデータセットのみを返します。 linqをどのように修正すればい​​いですかDisplayOrderで各レベルでソートされたすべてのデータを返します

+0

なぜMenuOptionHeaderクラスとMenuOptionクラスが必要ですか?私は、MenuCategoryと同じプロパティを持っていると考えています。 – Tiramonium

答えて

1

OrderByをコレクションアイテムに呼び出しても、結果を再割り当てせずに並べ替えられません。あなたの例では、注文アイテムを格納できる余分な変数が必要です。あなたの商品は店舗から切り離されていますか?

List<Menu> orderedItems = menuRepository 
    .GetAll(x => x.SiteId == _siteConfiguration.Id && x.Active == true) 
    .ToList() 
    .ForEach(m => 
    { 
     m.MenuHeaders = m.MenuHeaders.OrderBy(d => d.DisplayOrder); 
     m.MenuCategories = m.MenuCategories.OrderBy(d => d.DisplayOrder); 
     m.MenuOptionHeaders = m.MenuOptionHeaders.OrderBy(d => d.DisplayOrder); 
    }); 

確かに、ネストされたプロパティへIOrderedEnumerableを割り当てますどの:もしそうなら、あなたはこのような何かを行うことができます。

関連する問題