谓词筛选表达式的扩展库PredicateLib

释放双眼,带上耳机,听听看~!

PredicateLib

PredicateLib是谓词筛选表达式Expression<Func<T, bool>>的一个扩展库,它可以帮你创建一个复杂且灵活的Expression<Func<T, bool>>,以作为EF、MongoDB Driver等ORM框架的查询条件。

1 Predicate的创建

1.1 true或false Predicate

var predicate = Predicate.True<User>();

表达式输出

item => true

1.2 通过属性创建Predicate

var predicate = Predicate.Create<User>(\"age\", 2, Operator.GreaterThan);

表达式输出

item => (item.Age > 2)

2 Predicate的逻辑扩展

var predicate = Predicate
    .True<User>()
    .And(item => item.Name == \"laojiu\");

if (true)
{
    predicate = predicate.And(item => item.Age > 10 && item.Age < 20);
}

表达式输出

item => ((True AndAlso (item.Name == \"laojiu\")) AndAlso ((item.Age > 10) AndAlso (item.Age < 20)))

3 Condition转换为Predicate

PredicateLib提供Condition对象,支持传入IEnumerable<KeyValuePair<,>>,IEnumerable 等类型作为条件项,然后转换为Predicate,适用于前端传入查询不确定的字段与值,后端不需要修改代码的需求。

var uri = new Uri(\"http://www.xx.com?age=1&name=laojiu&id=001\");
var predicate = uri.AsCondition<User>()
    .OperatorFor(item => item.Age, Operator.GreaterThan)
    .IgnoreFor(item => item.Id)
    .ToAndPredicate();  

表达式输出

item => ((item.Age > 1) AndAlso item.Name.Contains(\"laojiu\"))

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

Kubernetes 笔记 11 Pod 扩容与缩容 双十一前后的忙碌

2020-11-9 4:04:01

随笔日记

使用 ASP.NET Core MVC 创建 Web API(一)

2020-11-9 4:04:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索