【问题标题】:Predicate build with NET Core and EF Core使用 NET Core 和 EF Core 构建谓词
【发布时间】:2019-01-14 04:03:16
【问题描述】:

非常快速的问题:

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

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

但似乎在 Net CoreEF Core 中不可用。

我是不是错过了一个包裹或什么?

【问题讨论】:

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


    【解决方案1】:

    您确定您使用的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);
        }
    }
    

    【讨论】:

    • 我在 dotnet 核心中没有 Castmethod。您如何使用此代码?
    • 好的,我发现:这是 System.Linq 中存在的扩展方法。
    【解决方案2】:

    这里也有一个解决方案,可以像这样将字符串表达式解析为lambda表达式

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

    参考https://github.com/linhnle/Kkts.Expressions

    【讨论】:

    • 嗨,您在这里提出了自己的库,就这个问题而言,这是可以且合适的,但明确提及您是创建者/贡献者总是好的。 Here's 一个很好的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2018-01-31
    • 2021-11-11
    相关资源
    最近更新 更多