14

我正在使用 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.KursnamnString

我如何选择vk.Kursnamn并按顺序排序vk.Priority

4

4 回答 4

18

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

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

于 2013-09-25T17:55:26.043 回答
6

您可以将其重写为:

var query = from vk in db.Valdkurs 
            where vk.pnr == pnr 
            orderby vk.prioritet descending
            select vk.kursnamn;
于 2013-09-25T17:55:48.813 回答
2

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

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

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

于 2013-09-25T17:55:26.670 回答
0

尝试这个:

int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);
于 2014-08-17T02:22:46.840 回答