2013-09-25 4 views
12

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

Это то, что мое заявление LINQ выглядит как прямо сейчас:

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

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

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

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

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

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

Как я могу выбрать vk.Kursnamn и заказать их по vk.Priority?

ответ

16

Вам необходимо первого порядка, а затем выбрать, например:

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, который не поддерживается операция.

+0

Хотя все три ответа примерно одинаковы, и все работает отлично, я бы выбрал это как правильный ответ, так как он помог мне понять синтаксис LINQ best. –

2

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

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

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

5

Вы бы переписать это так:

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

Попробуйте это:

int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id); 
Смежные вопросы