谓词筛选表达式的扩展库PredicateLib
生活随笔
收集整理的這篇文章主要介紹了
谓词筛选表达式的扩展库PredicateLib
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PredicateLib是謂詞篩選表達(dá)式Expression<Func<T, bool>>的一個(gè)擴(kuò)展庫,它可以幫你創(chuàng)建一個(gè)復(fù)雜且靈活的Expression<Func<T, bool>>,以作為EF、MongoDB Driver等ORM框架的查詢條件。
1 Predicate的創(chuàng)建
1.1 true或false Predicate
var predicate = Predicate.True<User>();表達(dá)式輸出
item => true1.2 通過屬性創(chuàng)建Predicate
var predicate = Predicate.Create<User>("age", 2, Operator.GreaterThan);表達(dá)式輸出
item => (item.Age > 2)2 Predicate的邏輯擴(kuò)展
var predicate = Predicate.True<User>().And(item => item.Name == "laojiu");if (true) {predicate = predicate.And(item => item.Age > 10 && item.Age < 20); }表達(dá)式輸出
item => ((True AndAlso (item.Name == "laojiu")) AndAlso ((item.Age > 10) AndAlso (item.Age < 20)))3 Condition轉(zhuǎn)換為Predicate
PredicateLib提供Condition對象,支持傳入IEnumerable<KeyValuePair<,>>,IEnumerable<ConditionItem>等類型作為條件項(xiàng),然后轉(zhuǎn)換為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();表達(dá)式輸出
item => ((item.Age > 1) AndAlso item.Name.Contains("laojiu"))總結(jié)
以上是生活随笔為你收集整理的谓词筛选表达式的扩展库PredicateLib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解 ValueTask
- 下一篇: NET Core 3.0 AutoFac