我有以下数据:
10/6/2018 - Category 1
11/6/2018 - Category 1
12/6/2018 - Category 2
13/6/2018 - Category 1
15/6/2018 - Category 3
20/7/2018 - Category 1
21/7/2018 - Category 1
4/8/2018 - Category 4
5/8/2018 - Category 2
我正在尝试在点网核心中使用linq,以获得可以绘制的json结果。我正在尝试制作一个按月对计数进行分组的图形。
结果应如下所示(类别是动态的,我无法对其进行硬编码):
series: [{
name: 'Category 1',
data: [3, 2, 0]
}, {
name: 'Category 2',
data: [1, 0, 1]
}, {
name: 'Category 3',
data: [1, 0, 0]
}, {
name: 'Category 4',
data: [0, 0, 1]
}]
我不确定从哪里开始,如何用linq在点网核心中做到这一点
根据评论进行编辑:
首先,数据来自数据库,因此它是动态的。其次,结果就是我想要的输出结果,即类别1在6月有2个项目,在7月有2个项目,在8月有0个项目(如果不清楚,我使用DD / MM / YYYY)
答案 0 :(得分:0)
您可以使用NewtonSoft.Json将其作为JSON获取:
void Main()
{
var myData = new List<MyClass> {
new MyClass {Date=new DateTime(2018,6,10),Category="Category 1"},
new MyClass {Date=new DateTime(2018,6,11),Category="Category 1"},
new MyClass {Date=new DateTime(2018,6,12),Category="Category 2"},
new MyClass {Date=new DateTime(2018,6,13),Category="Category 1"},
new MyClass {Date=new DateTime(2018,6,15),Category="Category 3"},
new MyClass {Date=new DateTime(2018,7,20),Category="Category 1"},
new MyClass {Date=new DateTime(2018,7,21),Category="Category 1"},
new MyClass {Date=new DateTime(2018,8,4),Category="Category 4"},
new MyClass {Date=new DateTime(2018,8,5),Category="Category 2"},
};
var result = from c in myData.Select(d => d.Category).Distinct()
let months = myData.Select(d => d.Date.Month).Distinct().OrderBy(d => d).ToArray()
let m1 = months[0]
let m2 = months[1]
let m3 = months[2]
select new {
name = c,
data = new int[] {
myData.Count(d => d.Category == c && d.Date.Month==m1),
myData.Count(d => d.Category == c && d.Date.Month==m2),
myData.Count(d => d.Category == c && d.Date.Month==m3),
}
};
var json = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine(@"""series"": " + json);
}
public class MyClass
{
public DateTime Date { get; set; }
public string Category { get; set; }
}