为了账号安全,请及时绑定邮箱和手机立即绑定

Dapper IPredicate 到 linq 的转换

Dapper IPredicate 到 linq 的转换

C#
红糖糍粑 2021-07-27 20:26:09
在我的应用程序中,我有一些实现一个通用接口的类,我们称之为 IValidator。每个实现此类接口的类都返回 PredicateGroup 对象。因此,出于测试目的,我决定从数据库的特定视图中获取所有数据,然后在返回的集合(IEnumerable)上通过 linq where(无需使用不同谓词对数据库进行多次调用)进行快速过滤。dapper 是否支持从 IPredicate/PredicateGroup 到 Func<> 的这种转换,或者还有其他更快/更好的解决方案?这是我想要实现的一个小演示:        IEnumerable<Products> products = null;        using (var cn = new SqlConnection("connectionstring"))        {            //Get all elemnts from database(using only one call)            products = cn.GetList<Products>(Predicates.Field<Products>(f => f.Discontinued, Operator.Eq, true));        }        // class which implement IValidator and returns predicate group        List<IPredicate> computerPredicates = new List<IPredicate>        {            Predicates.Field<Products>(f => f.ProductName, Operator.Eq, "Computer"),            Predicates.Field<Products>(f => f.Price, Operator.Eq, 1200)        };        var computerPredicatesGroup = new PredicateGroup {Predicates = computerPredicates };        // class which implement IValidator and returns predicate group        List<IPredicate> phonePredicates = new List<IPredicate>        {            Predicates.Field<Products>(f => f.ProductName, Operator.Eq, "Phone"),            Predicates.Field<Products>(f => f.Price, Operator.Eq, 400)        };        var phonePredicatesGroup = new PredicateGroup { Predicates = phonePredicates };        var computers = products.Where( /* computerPredicates */); //??        var phones = products.Where( /* phonePredicatesGroup */); //??
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 250 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信