zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# PredicatBuilder

c#
2023-09-14 09:10:47 时间
public static class PredicateBuilder
    {
        public static Expression<Func<T, bool>> True<T>()
        {
            return f => true;
        }

        public static Expression<Func<T, bool>> False<T>()
        {
            return f => false;
        }

        public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
        {
            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
            return Expression.Lambda<Func<T, bool>>(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
        }

        public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
        {
            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
            return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
        }
    }
//使用
/*
Func<Model,bool> filter = valid;
Expressiojn<Func<Model,bool>> expf = PredicateBuilder.True<Model>().And(x=>filter(x));
List<Model> lst = DbContextInstance.Models.OrderBy(x=>x.id).Where(expf.Compile()).ToList();

public bool valid(Model m)
{
	//check 
	return true or false;
}
*/