动态封装查询条件之原生SQL语句方式
程序员文章站
2024-03-02 18:27:04
...
动态封装查询条件
这一篇写的是使用原生SQL语句的方式(纯原生sql语句,或者使用Dapper等orm框架也可以使用)。
上一篇: Layui Table 重载封装:讲了如何传递查询数据。
#region 查询条件自动匹配
/// <summary>
/// 查询条件匹配
/// <para>根据&&拆分字段,&&前为查询方式,没有&&,就是直接等号匹配,like&&字段,&&前为like,表示模糊查询,&&后面为字段,多表查询可以指定表别名,例如a.字段</para>
/// </summary>
/// <param name="searchfilter">前端传递的查询条件字符串</param>
/// <returns></returns>
public static string GetParameter(string searchfilter)
{
StringBuilder where = new StringBuilder(" 1=1 ");
if (!string.IsNullOrEmpty(searchfilter))
{
// json字符串转Hashtable对象
Hashtable hTable = JsonConvert.DeserializeObject<Hashtable>(searchfilter);
//Dictionary<string, string> dic= JsonConvert.DeserializeObject<Dictionary<string, string>>(searchfilter);
// 遍历解析的对象
foreach (DictionaryEntry item in hTable)
{
if (string.IsNullOrEmpty(item.Value.ToString2()))
{
// 跳过空值
continue;
}
// 处理 like in > < 等数据查询
if (item.Key.ToString().Trim().Contains("$$"))
{
string[] items = item.Key.ToString().Trim().Split(new string[] { "$$" }, StringSplitOptions.RemoveEmptyEntries);
// like&&字段名称 截取后应该是两个
if (items.Length != 2)
{
continue;
}
if (items[0].ToString().Trim() == "like")
{
where.Append($" and {items[1].ToString2().Trim()} like '%{item.Value.ToString2().Trim()}%'");
}
//后面的 > < in between。。。 遇到了在扩展
}
// 处理直接匹配的查询
else
{
//拼接sql查询语句(此处查询条件为=)
where.Append($" and {item.Key.ToString2().Trim()} = '{item.Value.ToString2().Trim()}'");
}
}
}
return where.ToString();
}
#endregion
突发奇想,刚写不久,后期可能会遇到一些考虑不周的问题,在改正。
上一篇: Jade之条件语句