我试图生成一个LINQ OrderBy
子句使用lambda表达式,输入实体的列名称作为字符串(在下面的“sortOn”变量中)。建立一个OrderBy基于子实体的属性的Lambda表达式
下面的代码工作正常,像“代码” sortOn值产生的拉姆达
p => p.Code
但我也想排序子实体,其中拉姆达可能是
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);
}
用例针对此问题正在显示的数据的网格,能够对数据进行排序,简单地通过将列名进行排序在回到服务器。我想使解决方案具有通用性,但现在已经开始使用特定类型(示例中的产品)。
为什么你要手动创建表达式? – 2012-07-13 16:59:30