簡體   English   中英

使用LEFT JOIN時將SQL數據表結果轉換為JSON對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM