JSON文件和LINQ总和和组

时间:2018-10-25 16:45:19

标签: c# arrays json linq

我可以从JSON文件查询中获得一些帮助吗?填充一个数据网格视图就可以了,但是我现在想做的是使用我一直在努力的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();
 }

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

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

2 个答案:

答案 0 :(得分:2)

我认为,使用Fluent语法通常可以更容易地了解这里出了什么问题。

对数据进行分组后,您不再需要处理单个对象,而可以使用“组”,这是对象的关键和可枚举。

然后,应按完整的员工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来评估查询。我刚刚在计算机上进行了验证,即可正常工作。

答案 1 :(得分:0)

尝试以下操作:

    class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<AssgnData> movie2 = null;

            dataGridView1.DataSource = movie2.GroupBy(x => new {id = x.EMPLID, month = x.MNTH1})
                .Select(x => new {
                    EMPLYID = x.Key.id,
                    MONTH = x.Key.month,
                    SUM = x.Sum(y => y.value)
                });
                        }
    }
    public class AssgnData
    {
        public string EMPLID { get; set; }
        public string MNTH1 { get; set; }
        public int value { get;set;}
    }