• 谓词筛选表达式的扩展库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<ConditionItem>等类型作为条件项,然后转换为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"))
    
  • 相关阅读:
    @@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的辨析
    Blue Jeans[poj3080]题解
    绿色通道题解
    后缀数组
    Power Strings[poj2406]题解
    KMP算法
    Life Forms[poj3294]题解
    STM32固件库文件编程结构思想的理解
    GPIO设置
    HTML_v2
  • 原文地址:https://www.cnblogs.com/kewei/p/10613843.html
Copyright © 2020-2023  润新知