[英]Converting SQL datatable results into a JSON Object when using LEFT JOIN
請問關於如何實現以下目標的一些指導:
我有兩張桌子。 表1和表2。
表格1:
id | Link | Date
123 | Example | 01/01/2017
表2:
id | Description | Name | Email
123 | Example edges on corners | Jim | Jim@example.com
123 | damage to corner | Fred | Fred@example,com
我正在使用SQL語句將表2連接到表1。然后將結果轉換為JSON對象。
C#代碼
DataTable dt = new DataTable();
using (SqlCommand cmd = new SqlCommand("SELECT Table1.ID, Table1.Link, Table1.Date, Table2.Description, Table2.Name, Table2.Email FROM Table1 LEFT JOIN Table2 ON Table1.ID = Table2.ID", con))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
if (col.ColumnName == "Link")
{
string escapeChar = dr[col].ToString().Replace(@"\", @"");
row.Add(col.ColumnName, escapeChar);
}
else if (col.ColumnName == "Date")
{
DateTime formatDate = DateTime.Parse(dr[col].ToString());
row.Add(col.ColumnName, formatDate.ToString("dd/MM/yyyy"));
}
else
{
row.Add(col.ColumnName, dr[col]);
}
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
}
結果是:
[
{
"ID": "123",
"Link": "example",
"Date":"01/01/2017",
"Description": "round edges on corners",
"Name": "Jim",
"Email": "Jim@example.com"
},
{
"ID": "123",
"Link": "example",
"Date":"01/01/2017",
"Description": "damage to corner",
"Name": "Fred",
"Email": "Fred@example,com"
}
]
我需要的是:
[
{
"ID": "123",
"Link": "example",
"Date": "01\/01\/2017",
"Descriptions": [
{
"Description": "round edges on corners",
"Name": "Jim",
"Email": "Jim@example.com"
},
{
"Description": "round edges on corners ",
"Name": "Fred",
"Email": " Fred @example.com"
}
]
}
]
實際上,表2中有兩個條目,表1中的ID 123。 如何獲得以上結果? 先感謝您。
您可以使用SQL Server 2016+ JSON功能
SELECT Table1.ID, Table1.Link, Table1.Date,
(
SELECT Table2.Description, Table2.Name, Table2.Email
FROM Table2
WHERE Table1.ID = Table2.ID
FOR json auto
) as 'Descriptions'
FROM Table1
GROUP BY Table1.ID, Table1.Link, Table1.Date
FOR json auto
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.