问题描述
用Sql语句的时候可以组合动态查询字符串,看了网上的一些文章用LinQ的时候,可以动态组合Lamda表达式,我写了一个方法publicstaticExpression<Func<TEntity,bool>>getExpression<TEntity>(thisstringfieldName,stringfieldValue,CompareOperateoperate)whereTEntity:class{ParameterExpressionparam=Expression.Parameter(typeof(TEntity),"c");Expressionleft=Expression.Property(param,typeof(TEntity).GetProperty(fieldName));Expressionright=Expression.Constant(fieldValue);Expressionfilter=null;switch(operate){caseCompareOperate.Equal:filter=Expression.Equal(left,right);break;caseCompareOperate.GreaterThan:filter=Expression.GreaterThan(left,right);break;caseCompareOperate.LessThan:filter=Expression.LessThan(left,right);break;caseCompareOperate.LessThanOrEqual:filter=Expression.LessThanOrEqual(left,right);break;caseCompareOperate.GreaterThanOrEqual:filter=Expression.GreaterThanOrEqual(left,right);break;caseCompareOperate.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);returnpred;}但是其中还有一些情况没有包括,像Like的这种情况,不知道各位在动态查询这块是怎么处理的,大家一起探讨一下,顶者有分
解决方案
解决方案二:
sf
解决方案三:
顶
解决方案四:
顶下
解决方案五:
Like是方法调用。
解决方案六:
我喜欢用Lamda。不知道你写这段是什么用。like:在Lamda里直接用db.table1.Where(a=>a.field1.IndexOf("asd")>-1)关于动态:varaa=db.table1.Where(a=>a.field1.IndexOf("asd")>-1);if(true)aa=aa.Where(a=>a.field2=="qq")elseaa=aa.Where(a=>a.field2=="ww")当然if里的左边aa可以用别的变量,如果你数据类型变了
解决方案七:
老外发布的LINQ示例中,不就写了个类帮助你动态写查询语句的吗?其实可以直接用他那个类的,据说是微软的大牛写的,可以看看!可以用Lamda写,但我感觉不是太好!