我可以获得有关从 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/