关于LinkQ的动态查询
用Sql语句的时候可以组合动态查询字符串,看了网上的一些文章用LinQ的时候,可以动态组合Lamda表达式,我写了一个方法
public static Expression<Func<TEntity, bool>> getExpression<TEntity>(this string fieldName, string fieldValue, CompareOperate operate) where TEntity : class
{
ParameterExpression param = Expression.Parameter(typeof(TEntity), "c");
Expression left = Expression.Property(param, typeof(TEntity).GetProperty(fieldName));
Expression right = Expression.Constant(fieldValue);
Expression filter = null;
switch (operate)
{
case CompareOperate.Equal:
filter = Expression.Equal(left, right);
break;
case CompareOperate.GreaterThan:
filter = Expression.GreaterThan(left, right);
break;
case CompareOperate.LessThan:
filter = Expression.LessThan(left, right);
break;
case CompareOperate.LessThanOrEqual:
filter = Expression.LessThanOrEqual(left, right);
break;
case CompareOperate.GreaterThanOrEqual:
filter = Expression.GreaterThanOrEqual(left, right);
break;
case CompareOperate.NotEqual:
filter = Expression.NotEqual(left, right);
break;
default:
filter = Expression.Equal(left, right);
break;
}
Expression<Func<TEntity, bool>> pred = Expression.Lambda<Func<TEntity, bool>>(filter, param);
return pred;
}
但是其中还有一些情况没有包括,像Like的这种情况,不知道各位在动态查询这块是怎么处理的,大家一起探讨一下,顶者有分