【发布时间】:2022-01-19 14:26:02
【问题描述】:
我在这里得到了类似这两张表的东西:
| Id | Name |
|---|---|
| 198 | Test-Project |
| 227 | Second test project |
和
| Id | ProjectId | Name |
|---|---|---|
| 12 | 198 | Task 1 |
| 23 | 198 | Task 2 |
| 34 | 227 | Task 1 |
这些将被映射到一个 sql 语句中,如下所示:
select project.Id, task.Id, task.ProjectId, task.Name, project.Name
from Project project
left join Task task on project.Id = task.ProjectId
返回这个:
| Id | Id | ProjectId | Name | Name |
|---|---|---|---|---|
| 198 | 23 | 198 | Task 1 | Test-Project |
| 198 | 12 | 198 | Task 2 | Test-Project |
| 227 | 34 | 227 | Task 2 | Second test project |
现在,我想为此获得一个结构,例如 Entity Framework 会返回(我在 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": []
}
关于如何解决这个问题的任何想法?
【问题讨论】:
-
所以你想显示每个项目下的任务?
-
@AndrewCorrigan 完全正确。如果还有另一个加入任务,我也想显示这些数据集(递归)
标签: c# .net data-structures sqldatareader