我正在编写一个 Linq 查询,其中我的对象在我的视图中构建了一个网格(表)。
filteredProducts =
filteredProducts.Take(take)
.Skip(pagesToSkip)
.OrderBy(w => w.ProductName)
.ToList();
按照非常常见的模式;根据单击的列标题,网格可以“排序”不同的列。我需要替换硬编码的“ProductName”,以便可以包含任何可能的列名。该解决方案可能基于this question提出的方法,但我的用例足够不同,以至于我还无法实现任何东西。SO的自动建议没有提供任何其他看起来很奇怪的明显问题,因为这肯定是一个常见问题。
我已经尝试了明显的:
var mySortColumn = "w.ProductId";
然后:
.OrderBy(w => mySortColumn)
并且不会收到编译或运行时投诉,但也不尊重指定值。我尝试过的其他变体会立即抛出编译器错误。
本文建议我应该使用 SWITCH/CASE 构造来为每个可能的“OrderBy”子句构建一个完全不同的查询。虽然我通常不会对黑客行为嗤之以鼻,但是;伊克。
看起来我们离动态 SQL 时代的“构建字符串”时代还没有那么远。