• 企业应用:应用层查询接口设计


    需求

    显示的列

    Columns。

    查询面板的查询参数

    SearchArguments。

    动态查询(允许用户自定义各种查询)

    DynamicFilterGroup。

    排序

    Sorters。

    分页信息

    Page。

    ItemsPerPage。

    示例代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 using Happy.Query;
     8 using Happy.Query.Filters;
     9 
    10 namespace Happy.Application.Query
    11 {
    12     /// <summary>
    13     /// 查询请求。
    14     /// </summary>
    15     public sealed class QueryRequest
    16     {
    17         /// <summary>
    18         /// 显式的列。
    19         /// </summary>
    20         public List<string> Columns { get; set; }
    21 
    22         /// <summary>
    23         /// 查询参数。
    24         /// </summary>
    25         public SearchArgument[] Arguments { get; set; }
    26 
    27         /// <summary>
    28         /// 高级查询。
    29         /// </summary>
    30         public DynamicFilterGroup Group { get; set; }
    31 
    32         /// <summary>
    33         /// 排序器。
    34         /// </summary>
    35         public Sorter[] Sorters { get; set; }
    36 
    37         /// <summary>
    38         /// 页码。
    39         /// </summary>
    40         public long Page { get; set; }
    41 
    42         /// <summary>
    43         /// 每页显式的记录数。
    44         /// </summary>
    45         public long ItemsPerPage { get; set; }
    46 
    47         internal QueryArgument ToQueryArgument(FilterDefinition filterDefinition)
    48         {
    49             var queryArgument = new QueryArgument();
    50             queryArgument.Columns = this.Columns;
    51             queryArgument.OrderClause = this.Sorters.ToOrderClause();
    52 
    53             var whereClauses = new List<WhereClause> { this.Group.ToWhereClause() };
    54             if (filterDefinition != null)
    55             {
    56                 whereClauses.Add(filterDefinition.BuildWhereClause(this.Arguments.ToArguments()));
    57             }
    58             queryArgument.WhereClauses = whereClauses;
    59 
    60             return queryArgument;
    61         }
    62     }
    63 }

    备注

    因为这些参数都是由客户端传递而来的,是不能信任的,而且所有的查询条件也不能完全依赖客户端,一些查询逻辑一定要由服务器生成,如:数据权限、业务逻辑。

  • 相关阅读:
    Git Cannot rebase: You have unstaged changes.
    importError: DLL load failed when import matplotlib.pyplot as plt
    install tushare in python 3.6
    pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用
    从池子里的beta看秋香, 个性迥异
    个股和股票池的beta系数的估算
    检验两个随机序列的beta系数
    spyder里的"查找文件里的特定字符串"非常方便
    地图上道路编号中的G S X Y
    场内的代码表, 感觉水很深
  • 原文地址:https://www.cnblogs.com/happyframework/p/3481441.html
Copyright © 2020-2023  润新知