- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试显示和分组 json 数据,并按一个唯一 ID 对整个数组的组件和结果进行分组,然后按日期(对于数组中的所有组件和结果)进行分组。
我已经从 json 文件中获取了数据,现在我只能对数据进行分组。
感谢任何帮助,谢谢!
患者.cs:
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;
}
}
更新:
最佳答案
您必须使用 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
编辑:
对于您在屏幕截图中显示的自定义输出。
...
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"]}");
}
输出:
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
关于c# - 在 C# 中按两个属性对 JSON 数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743293/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!