Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq对嵌套集合进行排序_C#_Linq_Sorting - Fatal编程技术网

C# 使用Linq对嵌套集合进行排序

C# 使用Linq对嵌套集合进行排序,c#,linq,sorting,C#,Linq,Sorting,我有以下嵌套类。我正在尝试在DisplayOrder字段的适当位置对每个级别进行排序 public class Menu { public virtual string MenuDescription { get; set; } public virtual bool Active { get; set; } public virtual short SiteId { get; set; } public virtual I

我有以下嵌套类。我正在尝试在DisplayOrder字段的适当位置对每个级别进行排序

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; }
    }

这仅重新生成零件数据集。我如何修改linq以返回按DisplayOrder在每个级别排序的所有数据?您在集合项上调用
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);
    });
List orderedItems=menureposition
.GetAll(x=>x.SiteId==\u siteConfiguration.Id&&x.Active==true)
托利斯先生()
.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
分配给嵌套属性。

为什么需要类MenuOptionHeader和MenuOption?我的意思是,考虑到它们与MenuCategory具有相同的属性。
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);
    });