NET Core和EF Core的谓词构建

时间:2018-08-07 06:44:24

标签: asp.net-core entity-framework-core

一个非常简单的问题:

我正在尝试创建这样的谓词构建器:

    var predicate = PredicateBuilder.False<MyObject>();

Net Core EF Core 中似乎不可用。

我缺少包裹或其他东西吗?

2 个答案:

答案 0 :(得分:3)

确定您使用的PredicateBuilder不是自定义类吗? PredicateBuilderLINQKit的一部分,但source is also available here如下:

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);
    }
}

答案 1 :(得分:1)

这也是一种解决方案,它可以将字符串表达式解析为lambda表达式

Expression<Func<Entity, bool>> predicate 
    = Interpreter.ParsePredicate<Entity>("id = 1 and name='Test'").Result;

请参阅https://github.com/linhnle/Kkts.Expressions