Linq 将LambaExpression添加到IQueryable的实例 ParameterExpression参数=表达式参数(产品类型),“x”); MemberExpression Left=Expression.MakeMemberAccess(参数,typeof(Product).GetProperty(“名称”); ConstantExpression Right=表达式.常量(值,类型(字符串)); BinaryExpression=expression.Equal(左、右); LambdaExpression lambada=Expression.Lambda(表达式,参数);
现在我如何将这个lambada添加到IQuerybale的实例中,比如说_queryLinq 将LambaExpression添加到IQueryable的实例 ParameterExpression参数=表达式参数(产品类型),“x”); MemberExpression Left=Expression.MakeMemberAccess(参数,typeof(Product).GetProperty(“名称”); ConstantExpression Right=表达式.常量(值,类型(字符串)); BinaryExpression=expression.Equal(左、右); LambdaExpression lambada=Expression.Lambda(表达式,参数);,linq,lambda,Linq,Lambda,现在我如何将这个lambada添加到IQuerybale的实例中,比如说_query _query.Where(lambada.Compile()) 不要使用.Compile,它会将表达式转换为委托。使用表达式而不是委托过滤IQueryable: ParameterExpression parameter = Expression.Parameter(typeof(Product), "x"); MemberExpression Left = Expression.MakeMe
_query.Where(lambada.Compile()) 不要使用
.Compile
,它会将表达式转换为委托。使用表达式而不是委托过滤IQueryable
:
ParameterExpression parameter = Expression.Parameter(typeof(Product), "x");
MemberExpression Left = Expression.MakeMemberAccess(parameter, typeof(Product).GetProperty("Name"));
ConstantExpression Right = Expression.Constant(value, typeof(String));
BinaryExpression expression = Expression.Equal(Left, Right);
LambdaExpression lambada = Expression.Lambda<Func<Product, bool>>(expression, parameter);
我想您只需要更改
lambda的类型
_query = _query.Where(lambada);
ParameterExpression parameter = Expression.Parameter(typeof(Product), "x");
MemberExpression Left = Expression.MakeMemberAccess(parameter, typeof(Product).GetProperty("Name"));
ConstantExpression Right = Expression.Constant(value, typeof(String));
BinaryExpression expression = Expression.Equal(Left, Right);
Expression< Func< Product, bool > > lambda = Expression.Lambda<Func<Product, bool>>(expression, parameter);
List< Product > products = new List< Product >
{
new Product { Name = "bar" },
new Product { Name = "foo" }
};
IQueryable< Product > queryable = products.AsQueryable().Where( lambda );