有些时候,我们需要将数据库中某张表的列作为参数,动态传入到linq中,但是在linq查询语句中并没有这样的功能,这个时候我们会很烦恼。接下来我将通过一下的例子来总结一下有关linq动态传递参数的问题
首先我们要引用命名空间
using System.Linq.Expressions;
我们的目标是动态传递参数,此时我们需要用到的ParameterExpression,用它来定义我们所需要的类型及相应的名称
如ParameterExpression para = Expression.Parameter(typeof(Categories), "c");
由于动态传递的参数可能会很多此时我们需要如下操作
List<ParameterExpression> paras = new List<ParameterExpression>();
List<Expression> expression = new List<Expression>();
foreach (var c in conditons)
{
Expression left = Expression.Property(para, typeof(Categories).GetProperty(c.Key));//这里获取的是列,所以我们需要通过反射获取数据表中的列
Expression right = Expression.Constant(c.Value);//(创建关联)获取相应字段的值
Expression ex = Expression.Equal(left, right);//放在一个对等条件中
if (expression.Any())
expression[0] = Expression.AndAlso(expression[0], ex);//这样做的目的是:当传入的列有多个时