Выберите один столбец, закажите другим

Я использую LINQ to SQL для выбора из базы данных. Я хочу выбрать один столбец, состоящий из значений String, но упорядочить по другому столбцу, который содержит значение "priority", которое является int.

Вот что выглядит мой оператор LINQ прямо сейчас:

var query = from vk in db.Valdkurs
            where vk.pnr == pnr
            select vk.kursnamn.OrderByDescending(x => vk.prioritet);

В третьей строке кода a NotSupportedException выдается с сообщением об исключении

Операторы последовательности не поддерживаются для типа 'System.String'

Я пришел к выводу, что, вероятно, из-за

vk.kursnamn.OrderByDescending(x => vk.prioritet);

где vk.Kursnamn имеет тип String.

Как я могу выбрать vk.Kursnamn и упорядочить их с помощью vk.Priority?

Ответ 1

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

var query = db.Valdkurs
    .Where(vk=> vk.pnr == pnr)   // Filter
    .OrderBy(vk => vk.prioritet) // prioritet is still here - order by it
    .Select(vk => vk.kursnamn);  // Now grab the kursnamn

В противном случае LINQ думает, что вы пытаетесь заказать символы string, который не поддерживается.

Ответ 2

Вы должны переписать это как:

var query = from vk in db.Valdkurs 
            where vk.pnr == pnr 
            orderby vk.prioritet descending
            select vk.kursnamn;

Ответ 3

Я не уверен в синтаксисе LINQ, но в основном то, что вы пытаетесь сделать, это:

var query = db.Valdkurs
              .Where(vk=> vk.pnr == pnr)
              .OrderByDescending(vk => vk.prioritet)
              .Select(vk => vk.kursnamn);

Вы можете объединить их вместе разными способами. По сути, каждый из них модифицирует коллекцию и возвращает измененную коллекцию. (Или, по крайней мере, они будут оценивать этот способ, когда они будут выполнены, что происходит, например, при вызове .ToList().)

Ответ 4

Попробуйте следующее:

int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);