返信レポートのソート順に複数のフィールドを選択できるレポートインターフェイスがあります。私が抱えている問題は、OrderBy/ThenByメソッドを実際にチェーンすることができないことです。ソートフィールドのリストを反復処理しているからです。LINQ/Entity Frameworkを使用してOrderBy/ThenByをプログラム的に連鎖させる
foreach (string sort in data.SortParams)
{
switch (sort)
{
case "state":
query = query.ThenBy(l => l.RegionCode);
break;
case "type":
query = query.ThenBy(l => l.Type);
break;
case "color":
query = query.ThenBy(l => l.Color);
break;
case "category":
query = query.OrderBy(l => l.Category);
break;
}
}
(注:私は、これは簡単にするための最初のソート項目であるかどうかを決定するスイッチを削除した)
コレクションを反復処理する方法上の任意の考え私はこのような何かを考えていますソート順を決定するには?
クリエイティブですが、クエリのパフォーマンスに影響するかどうかを確認する必要があります。索引の使用を妨げる可能性があります。 – usr
これは私の魅力のように働いた。最初は私は上記と全く同じコードを持っていましたが、最初の 'OrderBy()'のデフォルトの列を選択しなければなりませんでした。代わりに0を入れることはできませんでした。 0を指定すると、最終的なSQLクエリには、すべての行に対して値0を持つ追加の列が出てきて、その行で並べ替えてダミーのソートを行い、チェーンされた 'ThenBy() 'のすべての列を適用しますあなたが追加したものです。ありがとう! – BeemerGuy
'OrderBy(l => 0)'を呼び出すときに 'ArgumentOutOfRangeException'が出ます。 [Here](https://pastebin.com/raw/TZQ9g8Es)は 'StackTrace'です。 – Shimmy