我正在尝试OrderBy
使用 lambda 表达式生成一个 LINQ 子句,并将实体的列名作为字符串输入(在下面的“sortOn”变量中)。
下面的代码适用于 sortOn 值,如生成 lambda 的“代码”
p => p.Code
但我也想对一个子实体进行排序,其中 lambda 可能在
p => p.Category.Description
所以在这种情况下,我只想设置 sortOn = "Category.Description" 并生成正确的 lamdba 表达式。
这可能吗?任何有关执行此操作的最佳方法的建议都将受到欢迎。
此代码适用于简单的情况:
var param = Expression.Parameter(typeof (Product), "p");
var sortExpression = Expression.Lambda<Func<Product, object>>(
Expression.Property(param, sortOn), param);
if (sortAscending ?? true)
{
products = products.OrderBy(sortExpression);
}
else
{
products = products.OrderByDescending(sortExpression);
}
此问题的用例是显示数据网格并能够对数据进行排序,只需将要排序的列名传递回服务器即可。我想让解决方案通用,但现在已经开始使用特定类型(示例中的产品)。