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++11常用特性介绍——左值引用、右值引用

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

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

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

  3. C++ 新特性 笔记 2 右值引用

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

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

    创建表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++11 标准新特性: 右值引用与转移语义

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

  7. C++11 标准新特性: 右值引用与转移语义

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

  8. C++左值引用与右值引用

    本文翻译自: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. php的一些特殊用法

    php ruturn的另一个用法 database.php <?php return array ( 'hostname' => 'localhost', 'database' => ...

  2. iOS 之改变状态栏颜色

    1.在工程中找到 info.plist  文件,点击“+”号,选择 View controller-based status bar appearance 并设为 NO 2.在 AppDelegate ...

  3. (原)Ubuntu16中卸载并重新安装google的Protocol Buffers

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5782992.html 目前最新的是1.6.1 1. 卸载掉老版本的Protocol: sudo apt ...

  4. 网易2014校园招聘杭州Java笔试题

    10) ABC http://soft.chinabyte.com/os/56/12516056.shtml 11) BD. 12) AC. http://blog.sina.com.cn/s/blo ...

  5. 基于方法的LINQ语句

    LINQ中的查询方法有两站,一种是使用类似于SQL语句的方式,另一种则是基于方法的语句.基于方法的查询方法使用的是C#中面向对象概念的,主要的方法有: 投影:  Select | SelectMany ...

  6. joseph-约瑟夫环问题

    约瑟夫环运作如下: 1.一群人围在一起坐成环状(如:N) 2.从某个编号开始报数(如:K) 3.数到某个数(如:M)的时候,此人出列,下一个人重新报数 4.一直循环,直到所有人出列,约瑟夫环结束 关于 ...

  7. 大端模式&小端模式、主机序&网络序、入栈地址高低问题

    一.大端模式&小端模式 所谓的“大端模式”,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处 ...

  8. SPOJDIVCNT2: Counting Divisors(莫比乌斯反演)

    http://acm.tzc.edu.cn/acmhome/vProblemList.do?method=problemdetail&oj=SPOJ&pid=DIVCNT2 给出n求 ...

  9. java代码模拟先入先出,fifo

    最近在做一个先入先出的出库.琢磨了一下,写了一个简单的java代码测试: public static void main(String[] args) { LinkedList q = new Lin ...

  10. RTP 包格式 详细解析

    H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +---------------+      |0|1|2|3|4|5|6|7 ...