Asp.net 我无法让Linq Order By处理子列表
我正在使用Nhibernate拉出页面及其子页面,在页面上创建菜单结构。一切正常,我得到了所有正确的信息,但我根本无法让OrderBy处理子页面列表。我已经在订单中添加了数字,可以在屏幕上毫无问题地输出它,我只是无法按它排序Asp.net 我无法让Linq Order By处理子列表,asp.net,asp.net-mvc,linq,fluent-nhibernate,Asp.net,Asp.net Mvc,Linq,Fluent Nhibernate,我正在使用Nhibernate拉出页面及其子页面,在页面上创建菜单结构。一切正常,我得到了所有正确的信息,但我根本无法让OrderBy处理子页面列表。我已经在订单中添加了数字,可以在屏幕上毫无问题地输出它,我只是无法按它排序 menu.MenuItems = _session.Query<Page>().Where(a => a.IncludeInMenu).Where(b => b.ParentPage == null).OrderBy(c => c.MenuOr
menu.MenuItems = _session.Query<Page>().Where(a => a.IncludeInMenu).Where(b => b.ParentPage == null).OrderBy(c => c.MenuOrder).Select(d => new MenuItem
{
Route = "/" + d.Route,
Name = d.Name,
Current = (d.Id == id),
Clickable = d.Clickable,
SubItems = d.SubPages.Where(e => e.IncludeInMenu).OrderBy(f => f.MenuOrder).Select(g => new SubItem
{
Id = g.Id,
Route = !string.IsNullOrEmpty(g.Redirect) ? g.Redirect : g.Route,
Name = g.Name,
Order = g.MenuOrder,
Text = g.MetaDescription,
Redirect = g.RedirectType
}).OrderBy(h => h.Order).ToList()
}).ToList();
顶层中的order by似乎工作正常。我尝试在子级别中再次执行相同的操作,并在使用新创建的Order字段之后进行排序。但两者都不起作用。Page.MenuOrder和SubItem.Order都位于以下字段中:
public class MenuItem
{
public string Name { get; set; }
public string Route { get; set; }
public bool Current { get; set; }
public virtual bool Clickable { get; set; }
public List<SubItem> SubItems { get; set; }
}
public class SubItem
{
public int Id { get; set; }
public string Name { get; set; }
public string Route { get; set; }
public string Text { get; set; }
public int? Redirect { get; set; }
public int Order { get; set; }
}
我在我的视图中输出如下:
<nav id="nav">
<ul>@foreach (var MenuItem in Model.Menu.MenuItems)
{
<li>
<a href="@MenuItem.Route">@MenuItem.Name</a>
@if (MenuItem.SubItems != null && MenuItem.SubItems.Count > 0)
{
<ul>
@foreach (var SubItem in MenuItem.SubItems)
{
<li>
<a href="@SubItem.Route">
@SubItem.Name
</a>
</li>
}
</ul>
}
</li>
}
</ul>
</nav>
在我的数据库中,项目的ID也以与排序相同的方式对项目进行排序,因此我不知道从何处获得它从中选择的顺序。它们以3,1,4,2的形式出现
如果有人知道为什么这个子列表不能按我设置的顺序输出,我将不胜感激 您使用的是什么数据库技术?EF 6.x,EF Core 2,EF Core 2.1+,EF Core 3.x?子页面中的第一个order by是不相关的d.SubPages.where e=>e.IncludeInMenu.OrderByf=>f.MenuOrder,因为您稍后再次订购。你能提供样本数据吗?我检查了查询,没有发现任何明显的错误。您可以将查询生成的SQL记录下来,这样就更容易看到它是什么wrong@NetMageEF6.0及其MySQL 5。7@PeterFromCologne我知道我不需要它们,我只是把它们都放在里面,这样你就可以很容易地看到我试过什么。记录生成的SQL的最佳方法是什么,我想我以前没有这样做过,我倾向于使用调试期间看到的内容,这不容易转换为单个输出。菜单顺序是正确的,因为我只查看查询输出,只有在我将其转换到菜单模型时,它才会出错。如果我删除所有子页面的OrderBy子句,情况仍然相同。如果您切换到客户端处理,将AsEnumerable放在第一个Select之前,并删除额外的OrderBy,而保留最后一个呢?