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. win7 AnkhSVN 安装报错

    重装系统后,需要安装AnkhSVN,结果一直报如下错误 An error occurred during the installation of assembly"Microsoft.VC8 ...

  2. js中的eval方法转换对象时,为何一定要加上括号?

    待转换的是一个Json字符串: {'name':'新欢'} 而使用如下这种方式调用则会抛出语法异常, eval("{'name':'新欢'}"); 必须加上括号才行 eval(&q ...

  3. T4模板试水篇1_入门

    T4模板作为VS自带的一套代码生成器,功能有多强大我也不知道,最近查找了一些资料学习一下,做个笔记 更详细的资料参见: MSDN: http://msdn.microsoft.com/zh-cn/li ...

  4. TCP 和 UDP 协议发送数据包的大小 (转载)

    MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小 ...

  5. 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人

    起源 “ 极客”一词,来自于美国俚语“ geek”的音译,一般理解为性格古怪的人.数学“极客”大多是指,并不 一定是数学专业但又对数学等技术有狂热的兴趣并投入大量时间钻研的人.又 译作“ 奇客”.以前 ...

  6. redis学习研究--Redis作者谈Redis应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

  7. CSS3动画之透视

    若在x,y轴rotate90度,其实是线,不显示,按近大远小的透视关系可用 perspective:数值 开启透视: 默认以中间线为旋转基线,可以用transform-origin来设置旋转基线 在z ...

  8. centos源码安装git

    因为Centos上yum安装的话可能版本比较低,使用中会有一些难以预料的问题出现. 从源代码编译安装方法: #Centos执行: yum install curl-devel expat-devel ...

  9. mvn多模块开发消除重复依赖造成的打包失败

    错误信息: [ERROR] Failed to execute goal on project xiaoyiweifu-core: Could not resolve dependencies for ...

  10. hdu 1466 计算直线的交点数

    http://acm.hdu.edu.cn/showproblem.php?pid=1466 N条直线的交点方案数 = c 条直线交叉的交点数与(N-c)条平行线 + c 条直线本身的交点方案 = ( ...