SqlLikeAttribute 特性增加 左、右Like实现

时间:2022-08-30 23:36:01

SqlLikeAttribute 特性原来只实现了全Like,今天增加左、右Like实现

更新时间:2016-04-30
/// <summary>
/// 获取查询条件语句
/// </summary>
/// <typeparam name="SearchT">查询实体类型</typeparam>
/// <param name="searchEntity">查询实体</param>
/// <param name="sqlParameters">参数列表</param>
/// <param name="WhereSql">条件语句</param>
/// <param name="item">属性对象</param>
private static void GetQueryWhere<SearchT>(SearchT searchEntity, List<MySqlParameter> sqlParameters, StringBuilder WhereSql, PropertyInfo property)
{
//验证值是否有效
if (WhereValueValidate<SearchT>(searchEntity, property))
{
var sqlLikeAttr = property.GetCustomAttribute(typeof(SqlLikeAttribute));
if (sqlLikeAttr != null)
{
var columnName = GetColumnName(property);
var proprtyValue = filterLikeRiskStr(property.GetValue(searchEntity)); if (!string.IsNullOrEmpty(proprtyValue))
{
//获取特性值
var sqlLikeVal = (sqlLikeAttr as SqlLikeAttribute).Value;
switch (sqlLikeVal)
{
case SqlLikeType.LikeAll:
WhereSql.AppendFormat(" AND {0} Like '%{1}%'", !string.IsNullOrEmpty(columnName) ? columnName : property.Name, proprtyValue);
break;
case SqlLikeType.LikeLeft:
WhereSql.AppendFormat(" AND {0} Like '%{1}'", !string.IsNullOrEmpty(columnName) ? columnName : property.Name, proprtyValue);
break;
case SqlLikeType.LikeRight:
WhereSql.AppendFormat(" AND {0} Like '{1}%'", !string.IsNullOrEmpty(columnName) ? columnName : property.Name, proprtyValue);
break;
default:
WhereSql.AppendFormat(" AND {0} Like '%{1}%'", !string.IsNullOrEmpty(columnName) ? columnName : property.Name, proprtyValue);
break;
}
}
}
else if (property.GetCustomAttribute(typeof(GreaterAndEqualAttribute)) != null)
{
var columnName = GetColumnName(property);
if (!string.IsNullOrEmpty(columnName))
{
var parameterName = string.Format("@{0}", property.Name);
WhereSql.AppendFormat(" AND {0} >= {1}", columnName, parameterName);
sqlParameters.Add(new MySqlParameter(parameterName, property.GetValue(searchEntity)));
}
}
else if (property.GetCustomAttribute(typeof(LessAndEqualAttribute)) != null)
{
var columnName = GetColumnName(property);
if (!string.IsNullOrEmpty(columnName))
{
var parameterName = string.Format("@{0}", property.Name);
var value = property.GetValue(searchEntity);
if (value.GetType().Name.Equals("DateTime"))
{
WhereSql.AppendFormat(" AND {0} < {1}", columnName, parameterName);
sqlParameters.Add(new MySqlParameter(parameterName, Convert.ToDateTime(value).AddDays()));
}
else
{
WhereSql.AppendFormat(" AND {0} <= {1}", columnName, parameterName);
sqlParameters.Add(new MySqlParameter(parameterName, value));
}
}
}
else
{
//新方法灵活性高
var columnName = GetColumnName(property);
if (!string.IsNullOrEmpty(columnName))
{
var parameterName = string.Format("@{0}", property.Name);
WhereSql.AppendFormat(" AND {0} = {1}", columnName, parameterName);
sqlParameters.Add(new MySqlParameter(parameterName, property.GetValue(searchEntity)));
}
}
}
}

SqlLikeAttribute 特性增加 左、右Like实现的更多相关文章

  1. C&plus;&plus;11常用特性介绍——左值引用、右值引用

    一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...

  2. js实现Mac触摸板双指事件(上&sol;下&sol;左&sol;右&sol;放大&sol;缩小)

    前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的*,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...

  3. C&plus;&plus; 新特性 笔记 2 右值引用

    C ++ Rvalue引用说明 以下内容,主要是上述链接的摘要 介绍 Rvalue引用是C ++的一个特性,它是随C ++ 11标准添加的.使右值参考有点难以理解的是,当你第一次看到它们时,不清楚它们 ...

  4. mysql--创建表,插入数据,修改表名,删除表,简单查询&sol;内连接、左&sol;右连接

    创建表mm:  其中id为主键且自增长 ) primary key not null unique auto_increment, name ) not null, age ), class ) no ...

  5. spring各版本之间的特性增加

    一.Spring3.0以后不再提供一个大的完整的jar包,而是分成20个小的jar包: org.springframework.aop, 包含在应用中使用Spring的AOP特性时所需的类. org. ...

  6. 【转】C&plus;&plus;11 标准新特性&colon; 右值引用与转移语义

    VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新特性的支持,在网上搜了一下C++11的介绍,发现这篇文章非常不错,分享给大家同时自己作为存档. 原文地址:http://www.ib ...

  7. C&plus;&plus;11 标准新特性&colon; 右值引用与转移语义

    文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...

  8. C&plus;&plus;左值引用与右值引用

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/references-cpp?view=vs-2019 引用,类似于指针,用于存储一个位于内存某处的对象的 ...

  9. MySQL之左连接与右连接

    左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...

随机推荐

  1. Hadoop Shell命令字典(可收藏)

    可以带着下面问题来阅读: 1.chmod与chown的区别是什麽?2.cat将路径指定文件的内容输出到哪里?3.cp能否是不同之间复制?4.hdfs如何查看文件大小?5.hdfs如何合并文件?6.如何 ...

  2. communicate with other processes&comma; regardless of where they are running

    Advanced Programming in the UNIX Environment Third Edition   In the previous chapter, we looked at p ...

  3. 20160505-hibernate入门2

    基本概念和CURD 开发流程 1由Domain object -> mapping->db.(官方推荐) 2由DB开始,用工具生成mapping和Domain object.(使用较多) ...

  4. Javaweb学习笔记--分层设计

    在早期的JavaWeb应用中,JSP文件负责处理业务逻辑,控制网页流程并创建HTML页面,JSP文件是一个独立的,能自主完成所有任务的模块, 这带来了一系列问题:HTML代码和Java程序代码强耦合在 ...

  5. spring struts2 ibatis 框架结构图

    spring struts2 ibatis 框架结构图

  6. 十分钟通过 NPM 创建一个命令行工具

    大过年的,要不要写点代码压压惊?来花十分钟学一下怎么通过 NPM 构建一个命令行工具. 写了一个小 demo,用于代替 touch 的创建文件命令 touchme ,可以创建自带“佛祖保佑”注释的文件 ...

  7. SSL For Free 申请免费https SSL 凭证

    打开 SSL For Free网站(https://www.sslforfree.com) ,在输入框中填入你要申请 Let’s Encrypt 凭证的网域名称,可以用空白来分隔不同的网址,例如[su ...

  8. Java学习笔记(十九):Object类

  9. java enum使用方法

    直接上手吧,注释都写清楚了 编写枚举类 /** * 可以使用接口或类包裹枚举元素,使其可以统一调用入口 */ public interface TestEnumIntfc { /** * 创建枚举对象 ...

  10. NHibernate&period;3&period;0&period;Cookbook第一章第五节Setting up a base entity class

    Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...