LINQ сортировка, не работает - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть запрос LINQ, подобный следующему:

from i in _db.Items.OfType<Medium>()
from m in i.Modules
from p in m.Pages
where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
select p

Я использую запрос, подобный этому, потому что у меня строго типизированное представление (ASP.NET MVC).

Мне нужны элементыотсортировано по свойству i.Sort.orderby i.Sort и i.OrderBy(it => it.Sort) не работает.Как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010

При сортировке с помощью Linq вы обычно присваиваете OrderBy свойство и, в конечном итоге, IComparer, а не функцию сортировки.Например:

class Person {
    public int Age {get; set;}
}

public static void Main() {
    var ps = new List<Person>();
    ps.Add(new Person{Age = 1});
    ps.Add(new Person{Age = 5});
    ps.Add(new Person{Age = 3});

    var sorted = ps.OrderBy(p => p.Age);

    foreach(p in sorted) {
        Console.WriteLine(p.Age);
    }
}

Здесь Linq будет знать, как правильно сортировать целые числа.

Не предоставляя больше контекста (например, что такое i.Sort, какова его цель, что вы делаетехочу сделать с этим), было бы трудно быть более конкретным для вашей проблемы.

Тем не менее, я вполне уверен, что вы неправильно понимаете OrderBy: вы должны дать ему лямбда-выражение, которое идентифицирует свойство объектов, содержащихся в вашей последовательности, и затем Linq отсортирует вашу последовательность в соответствии с обычным порядком типа этого свойства (или в соответствии с другим порядком, который вы определяете для этого типа, используя IComparer).

0 голосов
/ 03 февраля 2010
from i in _db.Items.OfType<Medium>().OrderBy(x => x.Sort)
...
0 голосов
/ 03 февраля 2010

Допустим, ваши страницы включают номера страниц в свои свойства.Давайте представим, что это свойство называется «pagenumber».Затем вы должны добавить следующую строку orderby между строками where и select.

// (snip...)
where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
orderby p.pagenumber
select p

Или, возможно, у вас нет номеров страниц, а есть только заголовки страниц.Вы бы сделали почти то же самое:

where i != null && i.Type == 1 && i.Published == true && p.PageId == 2
orderby p.title
select p

Просто прочитав ваш код, я не могу сказать, какие критерии следует использовать для сортировки.Вам нужен какой-то упорядоченный элемент, идентификационный номер, номер страницы или какой-либо текст в алфавитном порядке.

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