LINQ to SQLを使用してデータベースから選択しています。 String
である値で構成される1つの列を選択したいが、int
である「優先度」値を含む別の列で並べ替えます。
これが私のLINQステートメントです。
var query = from vk in db.Valdkurs
where vk.pnr == pnr
select vk.kursnamn.OrderByDescending(x => vk.prioritet);
コードの3行目で、例外メッセージと共にNotSupportedException
がスローされます
シーケンス演算子はタイプ 'System.String'ではサポートされていません
私はそれがおそらく原因であるという結論に達しました
vk.kursnamn.OrderByDescending(x => vk.prioritet);
ここで、vk.Kursnamn
はString
タイプです。
vk.Kursnamn
を選択してvk.Priority
で注文するにはどうすればよいですか?
次のように、最初に注文してから選択する必要があります。
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
の文字を順序付けしようとしていると見なしますが、これはサポートされている操作ではありません。
これを次のように書き換えます。
var query = from vk in db.Valdkurs
where vk.pnr == pnr
orderby vk.prioritet descending
select vk.kursnamn;
LINQ構文はわかりませんが、基本的にあなたがやろうとしていることは次のとおりです。
_var query = db.Valdkurs
.Where(vk=> vk.pnr == pnr)
.OrderByDescending(vk => vk.prioritet)
.Select(vk => vk.kursnamn);
_
さまざまな方法でこれらを連結できます。基本的に、それぞれがコレクションを変更し、変更されたコレクションを返します。 (または、少なくとも、たとえば.ToList()
を呼び出すと、実行時にそのように評価されます。)
これを試して:
int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);