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