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

如何将SQL查询结果拆分至多个DataTable中?

没问题,我来帮你实现这个需求!直接上思路+代码,清晰明了:

实现方案:将查询结果按id拆分到DataSet的多个DataTable中

核心思路是:先执行SQL拿到完整结果集,再在C#中按id分组,为每个分组创建独立的DataTable并加入DataSet。

1. 完整代码实现

// 记得引用必要的命名空间
using System.Data;
using System.Data.SqlClient;
using System.Linq;

public DataSet SplitDataById(int selectedId)
{
    DataSet groupedDataSet = new DataSet();
    // 替换成你的SQL Server连接字符串
    string connStr = "Server=你的服务器名;Database=你的库名;Integrated Security=True;";
    string query = @"SELECT id, other_data FROM Data_Table 
                    WHERE id IN ( SELECT id FROM Other_Table WHERE other_id = @Selected_id )";

    // 第一步:获取完整的原始结果集
    DataTable rawTable = new DataTable();
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            // 用参数化查询防止SQL注入,这是必须的安全操作
            cmd.Parameters.AddWithValue("@Selected_id", selectedId);
            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(rawTable);
            }
        }
    }

    // 第二步:按id分组,生成独立DataTable
    var groupedRows = rawTable.AsEnumerable()
                              .GroupBy(row => row.Field<int>("id")); // 若id是其他类型,比如string,改成对应类型

    foreach (var idGroup in groupedRows)
    {
        // 复制原始表的结构(只复制列,不复制数据)
        DataTable singleIdTable = rawTable.Clone();
        // 给新表命名,方便后续识别,比如"Id_2_Data"
        singleIdTable.TableName = $"Id_{idGroup.Key}_Data";

        // 将当前分组的所有行导入新表
        foreach (DataRow row in idGroup)
        {
            singleIdTable.ImportRow(row);
        }

        // 把新表加入DataSet
        groupedDataSet.Tables.Add(singleIdTable);
    }

    return groupedDataSet;
}

2. 关键细节说明

  • 安全规范:一定要用SqlParameter传递参数,绝对不能直接拼接@Selected_id的值,避免SQL注入风险。
  • 类型适配:如果你的id不是int类型(比如GUID或string),记得把row.Field<int>("id")改成对应的数据类型。
  • 表命名:示例中用Id_{id值}_Data作为表名,你可以根据业务需求调整,比如直接用id值当表名,但要注意避免特殊字符。
  • 性能提示:如果原始数据量极大,内存分组可能会占用较多资源,此时可以考虑在SQL中按id分批查询,但常规数据量下,内存分组的方式更简洁高效。

这样处理后,返回的DataSet里就会包含多个DataTable,每个表对应一个id的所有数据,完全符合你想要的格式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:41