选择一列,按另一列排序

时间:2013-09-25 17:52:28

标签: c# linq linq-to-sql sql-order-by

我正在使用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订购?

4 个答案:

答案 0 :(得分:17)

您需要先订购,然后选择,如下所示:

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的字符,这不是受支持的操作。

答案 1 :(得分:5)

您可以将其重写为:

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

答案 2 :(得分:2)

我不确定LINQ语法,但基本上你要做的是:

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

您可以通过各种方式将这些链接在一起。基本上每个修改集合并返回修改后的集合。 (或者至少他们会在执行时评估这种方式,例如,当您拨打.ToList()时会发生这种情况。)

答案 3 :(得分:0)

试试这个:

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