使用C

大师1 2024-07-27 ⋅ 20 阅读

在开发 web 应用程序时,我们常常需要根据传递的查询参数构建 SQL 语句的 Where 条件。本篇博客将介绍如何使用 C# 将 QueryString 参数列表拼接成 Where 条件,并提供了一些代码示例。

1. 拼接 Where 条件的需求

假设我们有一个名为 "products" 的表,其中包含以下字段:id、name、price、category。我们希望根据传递的查询参数动态构建 SQL 语句的 Where 条件,实现按照不同的过滤条件进行数据查询。

以下是几个示例查询参数列表:

  • 查询价格大于100的产品:?price_greater_than=100
  • 查询价格小于等于50的产品:?price_less_than_or_equal_to=50
  • 查询名称包含"apple"的产品:?name_contains=apple
  • 查询分类为"电子产品"且价格大于1000的产品:?category=电子产品&price_greater_than=1000

2. 拼接 Where 条件的实现

我们可以通过使用 System.Web.HttpUtility 类的 ParseQueryString 方法解析 QueryString 参数,并根据解析结果创建一个 Dictionary 对象,其中键是参数名称,值是参数值。

using System;
using System.Collections.Generic;
using System.Web;

public class QueryStringBuilder
{
    public static string BuildWhereCondition(string queryString)
    {
        var parameters = HttpUtility.ParseQueryString(queryString);
        var whereConditions = new List<string>();

        foreach (var key in parameters.AllKeys)
        {
            var value = parameters[key];

            switch (key.ToLower())
            {
                case "price_greater_than":
                    whereConditions.Add($"price > {value}");
                    break;
                case "price_less_than_or_equal_to":
                    whereConditions.Add($"price <= {value}");
                    break;
                case "name_contains":
                    whereConditions.Add($"name LIKE '%{value}%'");
                    break;
                case "category":
                    whereConditions.Add($"category = '{value}'");
                    break;
                // 添加其他的查询条件处理
                default:
                    // 忽略未知的查询参数
                    break;
            }
        }

        return whereConditions.Count > 0 ? string.Join(" AND ", whereConditions) : "1=1";
    }
}

在上述代码中,我们使用了一个 Dictionary 对象存储查询参数,并根据不同的参数名称拼接相应的 Where 条件语句。值得注意的是,我们使用了 SQL 语句的占位符(placeholder)来防止 SQL 注入攻击。

同时,我们使用了一个 1=1 的条件作为默认的 Where 条件,这样即使没有传递任何查询参数,也可以返回所有记录。

3. 使用示例

下面是一些使用示例:

class Program
{
    static void Main(string[] args)
    {
        var queryString = "?price_greater_than=100&category=电子产品";
        var whereCondition = QueryStringBuilder.BuildWhereCondition(queryString);

        Console.WriteLine($"Where 条件:{whereCondition}");
        // 输出:Where 条件:price > 100 AND category = '电子产品'
    }
}

4. 总结

在本篇博客中,我们介绍了如何使用 C# 将 QueryString 参数列表拼接成 SQL 语句的 Where 条件。通过解析 QueryString 参数,并根据参数名称动态构建 Where 条件语句,我们可以根据不同的查询参数进行灵活的数据查询。在实际开发中,请记得使用占位符来防止 SQL 注入攻击,并确保注释掉未知查询参数的情况。


全部评论: 0

    我有话说: