C#条件拼接Expression<Func<T, bool>>的使⽤
使⽤代码
特别注意:拼接条件时,所使⽤到的条件strID,strBir必须是独⽴的
var predicate = 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);
var lst = db.Queryable<Student>.Where(predicate).ToList();活期利息怎么算
⼯具类
using System;
using System.Linq.Expressions;
namespace WindowsFormsApp1.Tools
{
public static class PredicateBuilder
{
public static Expression<Func<T, bool>> GetTrue<T>() { return f => true; }
public static Expression<Func<T, bool>> GetFal<T>() { return f => fal; }
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> cond)
{
return first.AndAlso<T>(cond, Expression.AndAlso);
800资源}
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> cond)
{
return first.AndAlso<T>(cond, Expression.OrEl);
}
private static Expression<Func<T, bool>> AndAlso<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2, Func<Expression, Expression, BinaryExpression> func) {
var parameter = Expression.Parameter(typeof(T));
var leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter);
var left = leftVisitor.Visit(expr1.Body);
var rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter);面试通知
var right = rightVisitor.Visit(expr2.Body);
黄华溢return Expression.Lambda<Func<T, bool>>(
func(left, right), parameter);
}
private class ReplaceExpressionVisitor : ExpressionVisitor
{
演良private readonly Expression _oldValue;
private readonly Expression _newValue;孩子祝福语
public ReplaceExpressionVisitor(Expression oldValue, Expression newValue)
{
_oldValue = oldValue;
_newValue = newValue;
}
public override Expression Visit(Expression node)
{
if (node == _oldValue)
return _newValue;
return ba.Visit(node);
}
}
}
}
到此这篇关于C#条件拼接Expression<Func<T, bool>>的使⽤的⽂章就介绍到这了,更多相关C#
什么衣什么食条件拼接Expression<Func<T, bool>>内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
>羊肉白菜饺子馅的做法