提问者:小点点

将SQL结果结构化为信封格式


我这里有两张桌子:

这些将映射到sql语句中,如下所示:

select project.Id, task.Id, task.ProjectId, task.Name, project.Name
from Project project 
left join Task task on project.Id = task.ProjectId 

其中返回以下内容:

现在,我想为此得到一个结构,就像实体框架将返回(我在json中显示,以使其更容易理解):

{
  "datasets": [
    {
      "records": [
        {
          "fields": [
            {
              "Name": "Name",
              "Value": "Test-Project"
            },
            {
              "Name": "Id",
              "Value": 198
            }
          ],
          "datasets": [
            {
              "records": [
                {
                  "fields": [
                    {
                      "Name": "ProjectId",
                      "Value": 198
                    },
                    {
                      "Name": "Name",
                      "Value": "Task 1"
                    },
                    {
                      "Name": "Id",
                      "Value": 23
                    }
                  ]
                }
...

我尝试了SqlDataReader,但我不知道如何将它们分组...我在逻辑部分失败了...

await using SqlCommand cmd = new SqlCommand(sql, connection).SetParameters(parameters);

connection.Open();

Root root = new ();
DataSet dataSet = new ();
await using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
{
    while (reader.Read())
    {
        Record record = new ();

        for (int i = 0; i < reader.FieldCount; i++)
        {
            Field field = new ()
            {
                Name = _getColumnName(i),
                Value = reader[i]
            };

            record.DataFields.Add(field);
        }

        dataSet.Records.Add(record);
    }
}
root.DataAreas.Add(dataSet);

我唯一能得到的是一个包含所有数据集的平面列表:

{
  "datasets": [
    {
      "records": [
        {
          "fields": [
            {
              "Name": "Id",
              "Value": 23
            },
            {
              "Name": "Name",
              "Value": "Task 1"
            },
            {
              "Name": "Name",
              "Value": "Test-Project"
            },
            {
              "Name": "Id",
              "Value": 198
            },
            {
              "Name": "ProjectId",
              "Value": 198
            }
          ],
          "datasets": []
        }

有没有办法解决这个问题?


共1个答案

匿名用户

您需要使用两个SQL命令,如https://stackoverflow.com/a/19448944/3409634在第一个命令中读取父记录,在第二个命令中读取子记录并添加到父对象。