我试图创建一个多维数组,并使用相同的多维数组创建图表,但我不知道如何制作图表。
我想要达成的逻辑如下。
//T070_RESULT is an entity .Linq
public int id { get; set; }
public string entidade { get; set; }
public Nullable<int> entidadeID { get; set; }
public string unidadeMedida { get; set; } //not relevant for this question
public string valor { get; set; }
public Nullable<System.DateTime> date { get; set; }
//this list contains objects with the structure above
List<T070_RESULT> resultados = ListOfResults(idSample);
想象一下这个例子(resultados list):
[id, entidade, entidadeID, unidadeMedida, valor, date]
[1, EntityX, 10, 10, 100, 01-09-16]
[2, EntityX, 10, 10, 80, 02-09-16]
[3, EntityX, 10, 10, 120, 01-10-16]
[4, EntityZ, 10, 10, 100, 01-09-16]
[5, EntityZ, 10, 10, 110, 01-10-16]
现在我想创建一个按日期分组的多维数组,并在下面显示以下结果:
将从上面的输入生成新对象:
EntityX_Value(该年当月的总和值)将是一列,所有值按日期分组
EntityZ_Value相同
[id, EntityX_Value(summed values for that month of that year), EntityZ_Value, date]
[1, 180, 100, 01-09-16]
[2, 80, 110, 01-10-16]
(关于日期,我不需要这一天,我只需要按月和年分组)
我怎么能用linq或其他方法做到这一点?
答案 0 :(得分:1)
这有点棘手,基于您评论实体可能是动态的(即,不仅仅是EntityX
和EntityZ
)。
要做的第一件事是找出你拥有的实体,这就像从列表中选择它们并使用Distinct
一样简单。然后你需要按月分组&amp; year,并使用实体列表构建类似字典的内容(key =实体名称值= valor
的总和)。
这样可行。
// get a distinct list of entities
var entities = list.Select(x => x.entidade).Distinct();
// group your original list, and use the above list to search for the right results
var result = list.GroupBy( x => new {Month = x.date.Value.Month, Year = x.date.Value.Year})
.Select( (x,i) => new {
id = (i+1),
values = entities.ToDictionary(k => k, v => x.Where(y => y.entidade == v).Sum(y => y.valor)),
date = new DateTime(x.Key.Year, x.Key.Month,1)
});
答案 1 :(得分:0)
有点令人困惑,但从预期输出中获取,您需要在date
上进行分组并执行类似的操作。
var result = resultados.GroupBy(x=>x.date)
.Select((x,i)=>
{
id = i+1,
EntityX_Value = x.Where(w=>w.entidade == "EntityX").Sum(s=>s.valor),
EntityZ_Value = x.Where(w=>w.entidade == "EntityZ").Sum(s=>s.valor),
date = x.Key
});