【发布时间】:2010-06-24 17:22:13
【问题描述】:
我有一个表单,用户可以在其中从下拉列表中选择以下内容:
table_name
columnName_to_sort_by
columnName_to_search_in
用户应在文本框中输入Search_text
表单应从许多表中提取数据。我想避免为每个表编写排序和搜索每个字段。这就是我想使用表达式树的原因。我想动态构建查询。
我想编写一个通用方法,根据用户输入为select、where 和orderby 方法生成表达式树。我可以使用System.Reflection 来获取正在查询的Type(我所有的表都是类型-我正在使用LinqToSql)。
我不知道如何形成表达式树。
这是我目前所拥有的:
private static List<T> GetSortedData<T>( string sortColumnName)
{
var type = typeof(T);
var property = type.GetProperty(sortColumnName);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, WHAT_SHOULD_BE_HERE, Expression.Quote(orderByExp));
return (List<T>)Expression.Lambda(resultExp).Compile().DynamicInvoke();
}
如何使用表达式树动态实现select、sort 和orderby?
【问题讨论】:
标签: c# expression-trees dynamic-linq