SqlLikeAttribute 特性增加 左、右Like实现
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实现的更多相关文章
- C++11常用特性介绍——左值引用、右值引用
一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...
- js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- C++ 新特性 笔记 2 右值引用
C ++ Rvalue引用说明 以下内容,主要是上述链接的摘要 介绍 Rvalue引用是C ++的一个特性,它是随C ++ 11标准添加的.使右值参考有点难以理解的是,当你第一次看到它们时,不清楚它们 ...
- mysql--创建表,插入数据,修改表名,删除表,简单查询/内连接、左/右连接
创建表mm: 其中id为主键且自增长 ) primary key not null unique auto_increment, name ) not null, age ), class ) no ...
- spring各版本之间的特性增加
一.Spring3.0以后不再提供一个大的完整的jar包,而是分成20个小的jar包: org.springframework.aop, 包含在应用中使用Spring的AOP特性时所需的类. org. ...
- 【转】C++11 标准新特性: 右值引用与转移语义
VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新特性的支持,在网上搜了一下C++11的介绍,发现这篇文章非常不错,分享给大家同时自己作为存档. 原文地址:http://www.ib ...
- C++11 标准新特性: 右值引用与转移语义
文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...
- C++左值引用与右值引用
本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/references-cpp?view=vs-2019 引用,类似于指针,用于存储一个位于内存某处的对象的 ...
- MySQL之左连接与右连接
左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...
随机推荐
- Linq to Entities中无法构造实体或复杂类型
EF中在使用linq就行查询select时不能直接使用自动映射生成的类,需要在单独声明一个类或者使用匿名类在查询完成后再转为对应的对象. public partial class WebForm1 : ...
- AJAX 控件集之TextBoxWatermark(水印文本框)控件
功能: 可以让TextBox控件初始化的时候拥有水印文字.属性: TargetControlID :要使用具有水印效果的TextBox控件ID. WatermarkCssCla ...
- 通过js引入当前所需要的js,css等
在我们web前端页面中经常会用到许多外部的js,css文件,那么问题来了,怎样才能一次性引入? 通过js便可实现 走码: //创建一个init.js文件 var jsUrls = "js/j ...
- 看看国外的javascript题目,你能全部做对吗?(分享)
本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...
- ReferenceError: $ is not defined
蛋疼的问题,原因是jquery导入顺序不对,任何页面都必须把jquery的导入放在首位,js文件放在其次.
- STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...
- iOS开发之网络篇-CocoaPods的安装 EI Capitan 10.11 之前的方式
注意:此种方式,在苹果系统 EI Capitan 10.11 之前的版本,新版本有所不同 一.安装 1> 查看gem源 $ gem sources –l 2> 删除源 (因为本人是第N次 ...
- [TYVJ] P1006 ISBN
ISBN 背景 Background NOIP2008年普及组第一题 描述 Description 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位 ...
- css案例学习之用thead、tbody、tfoot实现漂亮的table布局
首先说说thead.tbody.tfoot <thead> <tbody> <tfoot> 无论前后顺序如何改变, <thead> 内的元素总是在表的最 ...
- 【转】Android 平台下使用 i2c-tools
原文网址:http://my.oschina.net/luoly/blog/368881 Android 平台下使用 i2c-tools Andorid 开发板为 Freescale imx6 的 S ...