本文小编为大家详细介绍“C#条件拼接的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#条件拼接的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

使用代码

特别注意 :拼接条件时,所使用到的条件strID,strBir必须是独立的

varpredicate=PredicateBuilder.GetTrue<Student>();predicate=predicate.And(it=>it.id.ToString().Contains(strID));predicate=predicate.And(it=>it.Birthday.ToString().Contains(strBir));predicate=predicate.And(it=>it.Sex.ToString().Contains(strSex));predicate=predicate.And(it=>it.Age==20);varlst=db.Queryable<Student>.Where(predicate).ToList();

工具类

usingSystem;usingSystem.Linq.Expressions;namespaceWindowsFormsApp1.Tools{publicstaticclassPredicateBuilder{publicstaticExpression<Func<T,bool>>GetTrue<T>(){returnf=>true;}publicstaticExpression<Func<T,bool>>GetFalse<T>(){returnf=>false;}publicstaticExpression<Func<T,bool>>And<T>(thisExpression<Func<T,bool>>first,Expression<Func<T,bool>>second){returnfirst.AndAlso<T>(second,Expression.AndAlso);}publicstaticExpression<Func<T,bool>>Or<T>(thisExpression<Func<T,bool>>first,Expression<Func<T,bool>>second){returnfirst.AndAlso<T>(second,Expression.OrElse);}privatestaticExpression<Func<T,bool>>AndAlso<T>(thisExpression<Func<T,bool>>expr1,Expression<Func<T,bool>>expr2,Func<Expression,Expression,BinaryExpression>func){varparameter=Expression.Parameter(typeof(T));varleftVisitor=newReplaceExpressionVisitor(expr1.Parameters[0],parameter);varleft=leftVisitor.Visit(expr1.Body);varrightVisitor=newReplaceExpressionVisitor(expr2.Parameters[0],parameter);varright=rightVisitor.Visit(expr2.Body);returnExpression.Lambda<Func<T,bool>>(func(left,right),parameter);}privateclassReplaceExpressionVisitor:ExpressionVisitor{privatereadonlyExpression_oldValue;privatereadonlyExpression_newValue;publicReplaceExpressionVisitor(ExpressionoldValue,ExpressionnewValue){_oldValue=oldValue;_newValue=newValue;}publicoverrideExpressionVisit(Expressionnode){if(node==_oldValue)return_newValue;returnbase.Visit(node);}}}}

读到这里,这篇“C#条件拼接的方法”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。