Я не могу заставить Linq Order By работать в подсписке - PullRequest
0 голосов
/ 20 февраля 2020

Я использую 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();

Порядок на верхнем уровне, кажется, работает нормально , Я попытался сделать то же самое снова на подуровне и упорядочить по факту с помощью только что созданного поля Порядок. Но ни один не работает. 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>

В моей базе данных идентификаторы элементов Также заказывайте товары так же, как это делает заказ, так что я понятия не имею, где он получает заказ, из которого он выбирает. Они выходят как 3, 1, 4, 2.

Если у кого-нибудь есть идеи, почему этот подсписок не будет выводиться в порядке, который я устанавливаю, я был бы очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...