オブジェクトがビュー内にグリッド (テーブル) を構築する Linq クエリを作成しています。
filteredProducts =
filteredProducts.Take(take)
.Skip(pagesToSkip)
.OrderBy(w => w.ProductName)
.ToList();
非常に一般的なパターンに従って; グリッドは、クリックされた列ヘッダーに応じて異なる列を「OrderBy」できます。可能な列名を含めることができるように、ハードコードされた「ProductName」を置き換える必要があります。解決策はおそらくこの質問で提示されたアプローチに基づいていますが、私のユースケースは十分に異なっているため、まだ何も実装できていません。SOの自動提案は、これが一般的な問題であるため、奇妙に思われる他の明白なものを提供していません。
私は明白なことを試しました:
var mySortColumn = "w.ProductId";
それから:
.OrderBy(w => mySortColumn)
コンパイルや実行時の苦情はありませんが、指定された値も尊重されません。私が試した他のバリエーションでは、すぐにコンパイラ エラーが発生します。
この記事では、SWITCH/CASE コンストラクトを使用して、考えられる「OrderBy」句ごとにまったく異なるクエリを作成することを提案しています。私は通常、ハックで鼻を上げる人ではありませんが。イク。
動的 SQL の時代の「文字列を構築する」時代からそれほど進化していないように見えます。