web-dev-qa-db-ja.com

1つの列を選択し、別の列で並べ替え

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.KursnamnStringタイプです。

vk.Kursnamnを選択してvk.Priorityで注文するにはどうすればよいですか?

14
Daniel B

次のように、最初に注文してから選択する必要があります。

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の文字を順序付けしようとしていると見なしますが、これはサポートされている操作ではありません。

18
dasblinkenlight

これを次のように書き換えます。

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

LINQ構文はわかりませんが、基本的にあなたがやろうとしていることは次のとおりです。

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

さまざまな方法でこれらを連結できます。基本的に、それぞれがコレクションを変更し、変更されたコレクションを返します。 (または、少なくとも、たとえば.ToList()を呼び出すと、実行時にそのように評価されます。)

2
David

これを試して:

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