C# 使用Linq对嵌套集合进行排序
我有以下嵌套类。我正在尝试在DisplayOrder字段的适当位置对每个级别进行排序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
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);
});