8,497
社区成员
发帖
与我相关
我的任务
分享
ParameterExpression parameter = Expression.Parameter(typeof(T), "c");
Expression property = Expression.Property(parameter, typeof(T).GetProperty(field));
Expression notEqual = Expression.NotEqual(property, Expression.Constant(null));
Expression pred = Expression.Lambda(notEqual, parameter);
Delegate GetWhere<T>(string field)
{
Type ienum = typeof(IEnumerable<T>);
ParameterExpression parameter = Expression.Parameter(typeof(IEnumerable<T>), "c");
ParameterExpression linqParameter = Expression.Parameter(typeof(T), "x");
Expression property = Expression.Property(linqParameter, typeof(T).GetProperty(field));
Expression notequal = Expression.NotEqual(property, Expression.Constant(null));
var methods = typeof(Enumerable).GetMethods().Where(x => x.Name == "Where").First();
var methodWhere = methods.MakeGenericMethod(typeof(T));
Expression Where = Expression.Call(methodWhere, parameter, Expression.Lambda(notequal, linqParameter));
return Expression.Lambda(Where, parameter).Compile();
}
可以获取IEnumable<T>的Where(x=>x.field != null)方法
var d = GetWhere<Entity>("data");
d.DynamicInvoke( tIQueryable.AsQueryable() );
可以获取data不为空的列表
你自己也可以改写一下适合你的用途[/quote]
谢谢大神Delegate GetWhere<T>(string field)
{
Type ienum = typeof(IEnumerable<T>);
ParameterExpression parameter = Expression.Parameter(typeof(IEnumerable<T>), "c");
ParameterExpression linqParameter = Expression.Parameter(typeof(T), "x");
Expression property = Expression.Property(linqParameter, typeof(T).GetProperty(field));
Expression notequal = Expression.NotEqual(property, Expression.Constant(null));
var methods = typeof(Enumerable).GetMethods().Where(x => x.Name == "Where").First();
var methodWhere = methods.MakeGenericMethod(typeof(T));
Expression Where = Expression.Call(methodWhere, parameter, Expression.Lambda(notequal, linqParameter));
return Expression.Lambda(Where, parameter).Compile();
}
可以获取IEnumable<T>的Where(x=>x.field != null)方法
var d = GetWhere<Entity>("data");
d.DynamicInvoke( tIQueryable.AsQueryable() );
可以获取data不为空的列表
你自己也可以改写一下适合你的用途