zoukankan      html  css  js  c++  java
  • 搜索条件映射成Sql语句写法

    搜索条件映射成Sql语句有2种写法,第一种是把输入条件参数转成Expression表达式树,适合简单的Sql查询,第二种是拼接原生Sql,适合复杂的Sql查询。

    1 ) 第一种转成Expression表达式树写法

          private Expression<Func<PositionEntity, bool>> ListFilter(PositionListParam param)
          {
              var expression = LinqExtensions.True<PositionEntity>();
              if (param != null)
              {
                  if (!string.IsNullOrEmpty(param.PositionName))
                  {
                      expression = expression.And(t => t.PositionName.Contains(param.PositionName));
                  }
                  if (!string.IsNullOrEmpty(param.PositionIds))
                  {
                      long[] positionIdArr = CommonHelper.SplitToArray<long>(param.PositionIds, ',');
                      expression = expression.And(t => positionIdArr.Contains(t.Id.Value));
                  }
              }
              return expression;
          }

    调用方法如下:

       public async Task<List<PositionEntity>> GetPageList(PositionListParam param, Pagination pagination)
          {
              var expression = ListFilter(param);
              var list = await this.BaseRepository().FindList(expression, pagination);
              return list.ToList();
          }

    2 ) 第二种拼接原生Sql写法

     private List<DbParameter> ListFilter(LogApiListParam param, StringBuilder strSql)
          {
              strSql.Append(@"SELECT  a.id as Id,
                                      a.base_modify_time as BaseModifyTime,
                                      a.base_modifier_id as BaseModifierId,
                                      a.log_status as LogStatus,
                              FROM    sys_log_api a
                                      LEFT JOIN sys_user b ON a.base_modifier_id = b.id
                                      LEFT JOIN sys_department c ON b.department_id = c.id
                              WHERE   1 = 1");
              var parameter = new List<DbParameter>();
              if (param != null)
              {
                  if (!string.IsNullOrEmpty(param.UserName))
                  {
                      strSql.Append(" AND b.user_name like @UserName");
                      parameter.Add(DbParameterExtension.CreateDbParameter("@UserName", '%' + param.UserName + '%'));
                  }          
              }
              return parameter;
          }

    调用方法如下:

       public async Task<List<LogApiEntity>> GetPageList(LogApiListParam param, Pagination pagination)
          {
              var strSql = new StringBuilder();
              List<DbParameter> filter = ListFilter(param, strSql);
              var list = await this.BaseRepository().FindList<LogApiEntity>(strSql.ToString(), filter.ToArray(), pagination);
              return list.ToList();
          }
  • 相关阅读:
    简单区间dp
    【题解】石子合并
    【2019.7.6】刷题记录
    【题解】大朋友的数字
    【基础】dp系列1
    【题解】垃圾陷阱
    【题解】导弹拦截
    hadoop各组件安装(非专业人士,不定期更新)
    python逼格提升
    python第三十二天-----算法
  • 原文地址:https://www.cnblogs.com/axu92312/p/14079169.html
Copyright © 2011-2022 走看看