我可以从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; }
}
答案 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;}
}