0

私は次の特徴を持つメニューテーブルを持っています:

tblMenu: IDTitleParentIDOrderM

メニューを選択して、次のように 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
4

2 に答える 2

2

これはうまくいくはずです(サンプル):

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));
于 2013-03-16T19:07:44.653 に答える
0

順序付けに問題がある場合は、OrderBy と ThenBy を使用して、必要な順序を実現してみてください。

例えば:

 var items = source.OrderBy(i => i.OrderM).ThenBy(o => o.ParentID);
于 2013-03-16T18:49:17.540 に答える