你是否还在为匹配数据和过滤数据而忧虑

你是否还在为匹配数据和过滤数据而忧虑

一、前言

  在开发中,你是否还在为匹配机制随时修改、过滤条件经常变动而忧虑。如果有那么请你看下去。

 二、插件推荐

  System.Linq.Dynamic.Core 从命名上看,就知道它是一款动态查询的核心库。

   它的主要作用有那些?能帮助开发人员解决哪些痛点?

   接下来给大家逐步介绍。

三、使用

  System.Linq.Dynamic.Core 我们常使用的功能有以下2点

  1、动态的匹配机制。

  创建模型

/// <summary>
/// 学生模型
/// </summary>
public class StudentModel
{
    /// <summary>
    /// 姓名
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 年龄
    /// </summary>
    public int Age { get; set; }
}

 

  匹配代码

/// <summary>
/// 参数化动态解析
/// </summary>
public bool DynamicExpression(string userName, int userAge, string expression)
{
    //组织数据
    var model = new StudentModel
    {
        Name = userName,
        Age = userAge
    };

    var lambdaExpression = expression;

    var lambda = DynamicExpressionParser.ParseLambda<StudentModel, bool>(ParsingConfig.Default, true, lambdaExpression).Compile().DynamicInvoke(model);
    return (bool)lambda;
}

  测试1

   在测试界面,输入条件

  用户名:张三  年龄:18

  匹配条件: Name=="张三" && (Age==19 || Age==18)  

  点击动态解析表达式按钮

  

  可以看到,该数据是满足匹配条件。

  测试2

   在测试界面,输入条件

  用户名:张三  年龄:20

  匹配条件: Name=="张三" && (Age==19 || Age==18)  

  点击动态解析表达式按钮

  

  可以看到,该数据是不满足匹配条件。

 

  2、动态条件过滤数据。

  动态条件筛选数据代码

/// <summary>
/// 参数化动态解析
/// </summary>
public int DynamicExpressionSelectData(string expression)
{
    //组织数据
    var list = new List<StudentModel>()
    {
        new StudentModel
        {
            Name = "张三",
            Age= 18,
        },
         new StudentModel
        {
            Name = "李四",
            Age= 19,
        }
         ,
          new StudentModel
        {
            Name = "王五",
            Age= 30,
        }
    };
    // "张三,李四".Contains(Name) && (Age==19 || Age==18)
    var count = list.AsQueryable().Where(expression).ToList().Count;
    return count;

}

 

  测试1

   

  可以看到根据条件表达式,查询出一条满足条件的数据。

  测试2 

  改变查询条件:"张三,李四".Contains(Name) && (Age==19 || Age==18)

  

  可以看到根据条件表达式,查询出一条满足条件的数据。

四、总结

  根据以上2个例子可以看出,System.Linq.Dynamic.Core可以支持c# 任何表达式解析。因此我们在项目过程中,可以根据配置解析、匹配、筛选数据,大大减少开发人员工作。

 

   关注我:一个全栈多端的宝藏博主,定时分享技术文章,不定时分享开源项目。

    带你认识不一样的程序世界

 

 

评论