Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 如何使用parentID和ordermenu进行订购_C#_Asp.net_Linq - Fatal编程技术网

C# 如何使用parentID和ordermenu进行订购

C# 如何使用parentID和ordermenu进行订购,c#,asp.net,linq,C#,Asp.net,Linq,我的菜单表具有以下特点: tblMenu:ID、Title、ParentID、OrderM 我希望选择菜单和带有ParentID和OrderM的订单,如下所示: 例: 表中的数据: ID = 1 Title = menu1 ParentID = 0 OrderM = 1 ID = 2 Title = menu2 ParentID = 0 OrderM = 2 ID = 3 Title = menu3 ParentID = 0 OrderM = 3 ID = 4 Title = subme

我的菜单表具有以下特点:

tblMenu:ID、Title、ParentID、OrderM

我希望选择菜单和带有ParentID和OrderM的订单,如下所示:

例:

表中的数据:

ID = 1  Title = menu1 ParentID = 0 OrderM = 1
ID = 2  Title = menu2 ParentID = 0 OrderM = 2
ID = 3  Title = menu3 ParentID = 0 OrderM = 3
ID = 4  Title = submenu2-1 ParentID = 2 OrderM = 1
ID = 5  Title = submenu2-2 ParentID = 2 OrderM = 2
ID = 6  Title = submenu1-2 ParentID = 1 OrderM = 2
ID = 7  Title = submenu1-1 ParentID = 1 OrderM = 1
我希望使用select LINQ获得以下结果:

menu1
submenu1-1
submenu1-2
menu2
submenu2-1
submenu2-2
menu3

如果您在订购时遇到问题,请尝试使用OrderBy,然后使用by来实现所需的订购

例如:

 var items = source.OrderBy(i => i.OrderM).ThenBy(o => o.ParentID);
这应该有效():

var结果=
l、 其中(c=>c.ParentID==0)
.Select(c=>new{Menu=c,Sub=l.Where(ci=>ci.ParentID==c.ID).OrderBy(s=>s.OrderM)})
.OrderBy(ao=>ao.Menu.OrderM)
.SelectMany(ao=>ao.Sub.Count()==0?新列表{ao.Menu}:新列表{ao.Menu}.Concat(ao.Sub));

很难从你的问题中看出你想要实现的具体目标。乍一看,您似乎希望以特定的方式对记录进行排序。你能补充一点解释吗?我希望所有的子菜单都是你的菜单。在这种情况下,查看aush的答案使用嵌套子菜单是绝对可能的,但需要对查询进行一些改进。它适用于菜单1,子菜单1-1,子菜单1-1-1,。。。?(嵌套子菜单)不,它没有。实际上,Linq不能很好地处理递归。即使可以限制嵌套深度,linq查询仍然会过于复杂。在这种情况下,您可以考虑强制解决方案。
var result =
  l.Where(c => c.ParentID == 0)
   .Select(c => new {Menu = c, Sub = l.Where(ci => ci.ParentID == c.ID).OrderBy(s => s.OrderM)})
   .OrderBy(ao => ao.Menu.OrderM)
   .SelectMany(ao => ao.Sub.Count() == 0 ? new List<C> {ao.Menu} : new List<C> {ao.Menu}.Concat(ao.Sub));