欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态封装查询条件之原生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

突发奇想,刚写不久,后期可能会遇到一些考虑不周的问题,在改正。

相关标签: 笔记 C# c#