using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public static void Main()
Dictionary<string, string>[] data = new Dictionary<string, string>[2];
for(int i = 0; i < data.Length; i++){
data[i] = new Dictionary<string, string>();
data[i].Add("TicketId", Guid.NewGuid().ToString("n").Substring(0, 8));
data[i].Add("CreateTime", Guid.NewGuid().ToString("n").Substring(0, 8));
data[i].Add("Quantity", Guid.NewGuid().ToString("n").Substring(0, 8));
data[i].Add("IssueTime", Guid.NewGuid().ToString("n").Substring(0, 8));
data[i].Add("TicketNo", "1089");
data[0].Add("MealName", "TomYam");
data[1].Add("MealName", "Test");
Dictionary<string, string>[] data2 = new Dictionary<string, string>[8];
for(int i = 0; i < data2.Length; i++){
data2[i] = new Dictionary<string, string>();
data2[i].Add("AddonName", Guid.NewGuid().ToString("n").Substring(0, 2));
data2[0].Add("TicketNo", "1089");
data2[0].Add("MealName", "TomYam");
data2[1].Add("TicketNo", "1089");
data2[1].Add("MealName", "Test");
data2[2].Add("TicketNo", "1088");
data2[2].Add("MealName", "TomYam");
data2[3].Add("TicketNo", "1087");
data2[3].Add("MealName", "TomYam");
data2[4].Add("TicketNo", "1089");
data2[4].Add("MealName", "Test");
data2[5].Add("TicketNo", "1089");
data2[5].Add("MealName", "Test");
data2[6].Add("TicketNo", "1088");
data2[6].Add("MealName", "TomYam");
data2[7].Add("TicketNo", "1087");
data2[7].Add("MealName", "Test");
JArray arrObj = new JArray();
List<string> TicketNumber = data.Select(x => x["TicketNo"]).Distinct().ToList();
foreach (string ticket in TicketNumber){
JObject retObj = new JObject();
List<JObject> mealNamesObj = new List<JObject>();
List<string> mealNames = new List<string>();
for (int i=0; i<data.ToArray().Count(); ++i){
if(data.ToArray()[i]["TicketNo"] == ticket){
mealNames.Add(data.ToArray()[i]["MealName"].ToString());
foreach (string meal in mealNames){
JObject temp = new JObject();
List<string> AddonName = new List<string>();
for (int i=0; i<data2.ToArray().Count(); ++i){
if(data2.ToArray()[i]["MealName"] == meal && data2.ToArray()[i]["TicketNo"] == ticket){
AddonName.Add(data2.ToArray()[i]["AddonName"].ToString());
for (int i=0; i<data.ToArray().Count(); ++i){
if(data.ToArray()[i]["MealName"] == meal && data.ToArray()[i]["TicketNo"] == ticket){
CreateTime = data.ToArray()[i]["CreateTime"].ToString();
Quantity = data.ToArray()[i]["Quantity"].ToString();
IssueTime = data.ToArray()[i]["IssueTime"].ToString();
TicketId = data.ToArray()[i]["TicketId"].ToString();
temp.Add("AddonName", JArray.FromObject(AddonName));
temp.Add("CreateTime", CreateTime);
temp.Add("Quantity", Quantity);
temp.Add("IssueTime", IssueTime);
temp.Add("TicketId", TicketId);
var mealNamesJArray = JArray.FromObject(mealNamesObj);
retObj.Add("MealNames", mealNamesJArray);
retObj.Add("TicketNo", ticket);
Console.WriteLine(arrObj.ToString());