Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中按两个属性对JSON数据进行分组#_C#_Json_Arraylist_Group By_Json.net - Fatal编程技术网

C# 在C中按两个属性对JSON数据进行分组#

C# 在C中按两个属性对JSON数据进行分组#,c#,json,arraylist,group-by,json.net,C#,Json,Arraylist,Group By,Json.net,我试图显示和分组json数据,并按一个唯一ID和日期(对于数组中的所有组件和结果)对整个数组的组件和结果进行分组 我已经从json文件中获取了数据,现在我只能对数据进行分组 感谢您的帮助,谢谢 病人服务中心: namespace ConsoleApp { class Patient { public int ID{ get; set; } public string component { get; set; } public s

我试图显示和分组json数据,并按一个唯一ID和日期(对于数组中的所有组件和结果)对整个数组的组件和结果进行分组

我已经从json文件中获取了数据,现在我只能对数据进行分组

感谢您的帮助,谢谢

病人服务中心:

namespace ConsoleApp
{
    class Patient
    {

        public int ID{ get; set; }
        public string component { get; set; }
        public string result { get; set; }
        public string date { get; set; }
    }

    class Patients
    {
        public List<Patient> patients;
    }
}
名称空间控制台
{
班级病人
{
公共int ID{get;set;}
公共字符串组件{get;set;}
公共字符串结果{get;set;}
公共字符串日期{get;set;}
}
班级病人
{
公开名单病人;
}
}
更新:


您必须将患者数据与
ID
Date
进行分组,这样您就可以使用linq进行分组

...
JsonResponse = objReader.ReadLine();
Patients patients = JsonConvert.DeserializeObject<Patients>(JsonResponse);

var result = (from p in patients.patients
              group p by new { p.ID, p.date } into grp
              select new
              {
                  Key = grp.Key,
                  Items = grp.ToList()
              }).ToList();

foreach (var item in result)
{
    Console.WriteLine(item.Key.ID);
    Console.WriteLine(item.Key.date);
    Console.WriteLine();

    item.Items.ForEach(x => Console.WriteLine($"ID: {x.ID}, date: {x.date}, result: {x.result}, component: {x.component}"));
    Console.WriteLine();
}

Console.ReadLine();
编辑:

1030
10/19/2018

ID: 1030, date: 10/19/2018, result: 1, component: A
ID: 1030, date: 10/19/2018, result: 2, component: B
ID: 1030, date: 10/19/2018, result: 3, component: C
ID: 1030, date: 10/19/2018, result: 4, component: D
ID: 1030, date: 10/19/2018, result: 5, component: E

1031
12/12/2019

ID: 1031, date: 12/12/2019, result: 6, component: A
ID: 1031, date: 12/12/2019, result: 7, component: B
ID: 1031, date: 12/12/2019, result: 8, component: C
ID: 1031, date: 12/12/2019, result: 9, component: D
ID: 1031, date: 12/12/2019, result: 10, component: E
ID: 1030, DATUM: 10/19/2018, A: 1, B: 2, C: 3, D: 4, E: 5
ID: 1030980, DATUM: 12/12/2019, A: 6, B: 7, C: 8, D: 9, E: 10
用于屏幕截图中显示的自定义输出

...
var result = (from p in patients.patients
              group p by new { p.ID, p.date } into grp
              select new
              {
                  Key = grp.Key,
                  Items = grp.ToList()
              }).ToList();

DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("DATUM");

foreach (var item in result.Select(x => x.Items).FirstOrDefault())
{
    dt.Columns.Add(item.component);
}

foreach (var item in result)
{
    DataRow dr = dt.NewRow();
    dr["ID"] = item.Key.ID;
    dr["DATUM"] = item.Key.date;

    foreach (var innerItem in item.Items)
    {
        dr[innerItem.component] = innerItem.result;
    }

    dt.Rows.Add(dr);
}

foreach (DataRow row in dt.Rows)
{
    Console.WriteLine($"ID: {row["ID"]}, DATUM: {row["DATUM"]}, A: {row["A"]}, B: {row["B"]}, C: {row["C"]}, D: {row["D"]}, E: {row["E"]}");
}
输出:

1030
10/19/2018

ID: 1030, date: 10/19/2018, result: 1, component: A
ID: 1030, date: 10/19/2018, result: 2, component: B
ID: 1030, date: 10/19/2018, result: 3, component: C
ID: 1030, date: 10/19/2018, result: 4, component: D
ID: 1030, date: 10/19/2018, result: 5, component: E

1031
12/12/2019

ID: 1031, date: 12/12/2019, result: 6, component: A
ID: 1031, date: 12/12/2019, result: 7, component: B
ID: 1031, date: 12/12/2019, result: 8, component: C
ID: 1031, date: 12/12/2019, result: 9, component: D
ID: 1031, date: 12/12/2019, result: 10, component: E
ID: 1030, DATUM: 10/19/2018, A: 1, B: 2, C: 3, D: 4, E: 5
ID: 1030980, DATUM: 12/12/2019, A: 6, B: 7, C: 8, D: 9, E: 10

可能会涉及LINQ
GroupBy
。显示一些代码。@Rotem已更新!如果您已经能够从JSON反序列化数据并填充患者列表,那么您可以从问题中省略整个JSON和第一个代码块,这将使回答更容易。还有很多关于如何处理
GroupBy
的问题,你到底有什么问题?@Rotem我对背后的逻辑有问题:我需要为一个ID显示每个组件和结果(来自所有单独的对象)。哇,太棒了!这几乎就是我所需要的,看看我更新的代码,看看结果应该是什么样子,我需要为一个ID显示每个组件和结果(这背后的逻辑让我困惑:()。实际上,这很好!我刚刚从Console.Writeline()中删除了ID和日期键;我得到了我想要的,很抱歉让事情复杂化,谢谢!)我能再问一个问题吗?我可以在控制台应用程序中将这些数据显示为两行吗(就像我帖子中的更新一样)?@DevShieldMaiden,答案已更新。请查看答案中的编辑部分并输出:)谢谢!这几天来一直困扰着我:)