c# - JSON 文件和 LINQ 求和与分组

标签 c# arrays json linq

我可以获得有关从 JSON 文件查询的帮助吗?填充数据 GridView 工作得很好,但我现在想做的是使用 LINQ 过滤数据,而我真的很挣扎。 这工作得很好,用我所有的 jsonfile 数据填充 datagridview

//dataGridView1.DataSource = (from p in movie2                                      
//                      select p).ToArray();

下面是我一直在玩的东西。当我按员工 ID 分组到 g 中时,我无法再使用 p 对字段的引用。

 using (StreamReader file = File.OpenText(@"C:\temp\GRMReportingJSONfiles\Assigned_FTE\" + myFile))
 {
     JsonSerializer serializer = new JsonSerializer();
     IEnumerable<AssgnData> movie2 = (IEnumerable<AssgnData>)serializer.Deserialize(file, typeof(IEnumerable<AssgnData>));

     dataGridView1.DataSource = (from p in movie2
                                 group p by p.EMPLID[0] into g
                                 select new {
                                     EMPLID = p.EMPLID,
                                     (decimal?)decimal.Parse(p.MNTH1) ?? 0).Sum(),
                                 };
                                );
     //dataGridView1.DataSource = (from p in movie2
     //                            select Int32.Parse(p.MNTH1).Sum();
     dataGridView1.DataSource = (from p in movie2
                                 group p by p.EMPLID[0] into g
                                 select (decimal?)decimal.Parse(p.MNTH1) ?? 0).Sum();          //dataGridView1.DataSource = (from p in movie2                                      
     //                      select p).ToArray();
     //where p.Resource_BU == "7000776"
     //chart1.DataBindCrossTable(movie2, "MNTH1", "1", "PROJECT_ID", "Label = FTE");
     //chart1.Refresh();
 }

这是数组布局的一部分,暂时删除了其他字段,因为我只是想专注于这两个字段,数据集有 100k 行和 50 列

public class AssgnData
{
    public string EMPLID { get; set; }
    public string MNTH1 { get; set; }
}

最佳答案

在我看来,使用 Fluent Syntax 通常可以更容易地理解这里出了什么问题。

一旦对数据进行分组,您就不再处理单个对象,而是处理“组”,这是对象的键和可枚举对象。

获取每个员工的总和后,应按完整员工 ID 进行分组,然后解析对象的 MNTH1 字段并对它们求和。

dataGridView1.DataSource = movie2
    .GroupBy(p => p.EMPLID)  // create a group of data per employee
    .Select(g => new
    {
        EMPLID = g.Key,  // the employee id is the group key
        Sum = g.Sum(data => decimal.Parse(data.MNTH1))  // parse and sum
    })
    .ToArray();

编辑:你是对的,你需要 ToArray 来评估查询。我刚刚在我的计算机上验证并且它有效。

关于c# - JSON 文件和 LINQ 求和与分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994318/

相关文章:

c# - 后代非泛型类到基泛型类

c# - 如何在 EF 中使用存储库模式使用存储过程和复杂类型?

php - 如何从其他文件调用数组

javascript - 将 "[ with [ and ]"替换为 ] json

c# - HttpRequestException——这是客户端或服务器问题吗?

c# - C# 2.0 中的 Yield 关键字行为

c# - 如何在图片框中放大一个点

javascript - 有没有一种方法可以在不使用嵌套循环的情况下将 N 个长度为 N 的数组插入一个数组中?

android - 无法解析符号 JSONObject (Android Studio)

java - 如何在 Java 的 JSON 字符串中找到指定的名称及其值?