• 可动态构造查询条件的表达式类库(1)


    Suucha Expression 是一个表达式类,可适用于需要动态构造查询条件的前端(JavaScript)和后端(C#)的代码中。并且提供基于IQueryable的Where扩展。

    获取源代码及安装

    源代码:http://suuchaexp.codeplex.com

    在Visual Studio中通过Nuget控制台安装:

    Install-Package SuuchaExp //安装类库
    Install-Package SuuchaExpJs //安装js 

    基本用法

    //Javascript
    var searchParameter = new Suucha.SearchParameters();
    searchParameter.Page = 1;
    searchParameter.PageSize = 20;
    searchParameter.Condition = Suucha.Expression.Equal('Name', 'name');
    searchParameter.Condition = Suucha.Expression.And(searchParameter.Condition, 
                                Suucha.Expression.Equal('Code', '01'));
    //Json序列化后可以发送到服务端
    var json = Ext.JSON.encode(searchParameter);

    服务端可以直接使用SearchParameters的静态方法FromJson进行反序列化:

    var search = SearchParameters.FromJson(json);
    var result = query.Where(search.Condition);

     

    SuuchaExpression类及方法

    suucha Expression提供三种类型的表达式:

    • SuuchaMemberExpression,成员表达式
    • SuuchaConstantExpression,常量表达式
    • SuuchaBinaryExpression,二元表达式

    他们都是继承自SuuchaExpression,SuuchaExpression还提供静态方法来创建这些表达式(Javascript中也有对应的方法)和构造简单的表达式树:

    SuuchaMemberExpression Member(string name) 根据成员名称创建一个成员表达式,name格式:"Code", "User.Name"
    SuuchaConstantExpression Constant(object value) 创建一个常量表达式
    SuuchaBinaryExpression Equal(string left, object right) 创建一个等于的二元表达式,有多个重载
    SuuchaBinaryExpression NotEqual(string left, object right) 创建一个不等于的二元表达式,有多个重载
    SuuchaBinaryExpression LessThan(string left, object right) 创建一个小于的二元表达式,有多个重载
    SuuchaBinaryExpression LessThanOrEqual(string left, object right) 创建一个小于等于的二元表达式,有多个重载
    SuuchaBinaryExpression GreaterThan(string left, object right) 创建一个大于的二元表达式,有多个重载
    SuuchaBinaryExpression GreaterThanOrEqual(string left, object right) 创建一个大于等于的二元表达式,有多个重载
    SuuchaBinaryExpression Like(string left, string right) 创建一个Like操作的二元表达式,left是成员名称,right是要查找的字符串,可以使用通配符:%
    SuuchaBinaryExpression NotLike(string left, string right) 创建一个NotLike操作的二元表达式
    SuuchaBinaryExpression In(string left, string right) 创建一个In操作的二元表达式,right必须是用逗号分隔的多个值
    SuuchaBinaryExpression InLike(string left, string right) 创建一个InLike操作的二元表达式,right必须是用逗号分隔的多个值
    SuuchaBinaryExpression And(SuuchaBinaryExpression left, SuuchaBinaryExpression right) 构造一个And操作的二元表达式
    SuuchaBinaryExpression Or(SuuchaBinaryExpression left, SuuchaBinaryExpression right) 构造一个Or操作的二元表达式
    SuuchaExpression FromJson(string json) 从Json字符串反序列化

    基于IQueryable的扩展:

    • IQueryable Where(this IQueryable source, SuuchaExpression expression)
    • IQueryable<T> OrderBy<T>(this IQueryable<T> source, IEnumerable<SuuchaOrderBy> orderBy)

    这里需要特别说明的是成员表达式中成员名称可以是Primitive属性(比如Code),也可以是关联属性的Primitive属性(比如User.Name),还支持集合关联属性,通过一个例子来说明下:

    有一个角色类Role,一个用户类User,Role中有一个User的集合属性Users,现在需要查找角色的Users中User名称中包含"张"的角色,可以用如下的代码实现:

    var condition = SuuchaExpression.Like("Users.Name","");
    var result = roles.Where(condition);

    SuuchaExpression特别适合需要通过Javascript动态构建查询条件的场景,如果您感兴趣,可以下载源代码或通过nuget安装体验一下。

  • 相关阅读:
    db2缓冲池调优
    linux下安装rpm出现error: Failed dependencies
    linux下挂载磁盘
    db2 常见错误以及解决方案[ErrorCode SQLState]
    db2数据库表操作错误SQL0668N Operation not allowed for reason code "1" on table "表". SQLSTATE=57016的解决方法
    db2用户权限赋值
    db2查看当前用户模式及当前用户的权限
    loadrunner常用函数整理
    书上的脚本案例
    hdu 1711---KMP
  • 原文地址:https://www.cnblogs.com/tubo/p/2888339.html
Copyright © 2020-2023  润新知