如何解决您如何在Linq的同一表格中排序嵌套项目?
我只有一个表,其中所有菜单项都在
public class MenuItem
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Attributes { get; set; }
public List<MenuItem> SubItems { get; set; }
public int OrderId { get; set; }
public int Seperator { get; set; }
}
然后我要得到这样的嵌套层次结构(我已经删除了失败的排序)
var result = _context.MenuItems.Where(mi => mi.ID == ID)
.Include(si => si.SubItems)
.ThenInclude(ssi => ssi.SubItems)
.ThenInclude(sss => sss.SubItems).FirstOrDefault();
这是数据库。当OrderId为0时,我不在乎该顺序,但是对于其他任何事情,我都希望该顺序中的项。
所以我期望[File][Test][Edit][Properties][View][Help]
我得到的是[File][Edit][View][Help][Test][Properties]
您指定所需的顶级菜单项(在本例中为23)。然后,返回的对象将适当地包含所有这些菜单项和子菜单项。
我正在使用react和bootstrap来显示菜单。这样就可以正常工作了,但是商品是以数据库(ID)的顺序返回的,我似乎无法使OrderId列起作用。
有什么想法吗?
解决方法
使用SelectMany拼合结果
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Context _context = new Context();
var results = _context.MenuItems.SelectMany(x => x.SubItems.Select(y => new
{
parentId = x.ID,parentName = x.Name,child = y
})).ToList();
}
}
public class Context
{
public List<MenuItem> MenuItems { get; set; }
}
public class MenuItem
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Attributes { get; set; }
public List<MenuItem> SubItems { get; set; }
public int OrderId { get; set; }
public int Seperator { get; set; }
}
}
,
您是否尝试通过升序OrderId来排序结果?
int requestedMenuItemId = 23;
var result = _context.MenuItems
// keep only those menu items with ID equal to requestedMenuItemId
.Where(menuItem => menuItem.ID == requestedMenuItemId)
// order the remaining menu items by ascending OrderId
.OrderBy(menuItem => menuItem.OrderId)
// finally select only the properties that you plan to use
.Select(menuItem => new
{
// Select only the menu items that you actually plan to use
ID = menuItem.Id,Name = menuItem.Name,...
SubItems = menuItem.SubItems.Select(subItem => new
{
ID = subItem.Id,Name = subItem.Name,...
SubItems = subItem.SubItems.Select(ssubItem => new
{
ID = ssubItem.Id,...
})
.ToList(),})
.ToList(),});
顺便说一句,我希望每个menuItem都有一些指向父菜单项的外键。你忘了吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。