You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何修改单ID查询方法以支持多ID批量查询?

实现基于DataContext.SqlQuery的多ID查询List

刚好之前处理过类似的需求,直接给你两种安全、可行的实现方案,都能满足用SqlQuery配合IN子句查询多个ID的需求,还能避免SQL注入风险:

方案一:参数化IN子句(适合ID数量不多的场景)

这种方式会给每个ID生成独立的参数,完全避免字符串拼接带来的注入问题,代码逻辑也很直观:

public List<SomeObj> LoadSomeData(List<int> ids)
{
    // 先处理空列表的边界情况,返回空集合而非null
    if (ids == null || ids.Count == 0)
    {
        return new List<SomeObj>();
    }

    // 为每个ID生成参数占位符,比如@id0、@id1...
    var parameterPlaceholders = string.Join(", ", ids.Select((_, index) => $"@id{index}"));
    // 构造带IN子句的SQL查询
    var sqlQuery = $"SELECT * FROM SOMEOBJECT WHERE ID IN ({parameterPlaceholders})";

    // 把每个ID转换成对应的SqlParameter
    var parameters = ids.Select((id, index) => new SqlParameter($"@id{index}", id)).ToArray();

    // 执行查询并转换为List<SomeObj>
    return _dataContext.SqlQuery<SomeObj>(sqlQuery, parameters).ToList();
}

注意点:

  • 这个方案适合ID数量在几百以内的场景,如果ID数量上千,可能会触发SQL Server的参数数量上限(默认是2100个),这时候建议用下面的表值参数方案。
  • 确保SomeObj的属性名称和SOMEOBJECT表的列名完全匹配,或者在SQL查询里用别名映射(比如SELECT Column1 AS Property1 FROM ...)。

方案二:表值参数(适合大量ID的场景)

如果要查询的ID数量特别多,表值参数是更优的选择——它没有参数数量限制,性能也更稳定,不过需要先在数据库里创建一个自定义表类型:

第一步:在数据库中创建表类型

执行以下SQL语句:

CREATE TYPE IntListType AS TABLE (ID INT);

第二步:编写C#代码实现查询

public List<SomeObj> LoadSomeData(List<int> ids)
{
    if (ids == null || ids.Count == 0)
    {
        return new List<SomeObj>();
    }

    // 创建表值参数,指定对应的数据库表类型名称
    var tableParameter = new SqlParameter("@Ids", SqlDbType.Structured)
    {
        TypeName = "IntListType",
        // 把ID列表转换成符合表类型结构的匿名对象集合
        Value = ids.Select(id => new { ID = id }).ToList()
    };

    // 构造使用表值参数的SQL查询
    var sqlQuery = "SELECT * FROM SOMEOBJECT WHERE ID IN (SELECT ID FROM @Ids)";

    // 执行查询并返回结果
    return _dataContext.SqlQuery<SomeObj>(sqlQuery, tableParameter).ToList();
}

优势:

  • 支持上万甚至更多的ID查询,不会触发参数数量限制。
  • 相比拼接多个参数,数据库的执行计划更稳定,性能更好。

内容的提问来源于stack exchange,提问作者user9566597

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:03