Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net 我无法让Linq Order By处理子列表_Asp.net_Asp.net Mvc_Linq_Fluent Nhibernate - Fatal编程技术网

Asp.net 我无法让Linq Order By处理子列表

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

我正在使用Nhibernate拉出页面及其子页面,在页面上创建菜单结构。一切正常,我得到了所有正确的信息,但我根本无法让OrderBy处理子页面列表。我已经在订单中添加了数字,可以在屏幕上毫无问题地输出它,我只是无法按它排序

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,而保留最后一个呢?