我正在尝试创建一个多维数组和后缀,使用相同的多维数组来创建图表,但我不知道如何实现。
下面是我想要实现的逻辑。
//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 _ this列表):
[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或其他方法?
发布于 2016-08-31 17:19:12
这有点棘手,基于你所评论的实体可以是动态的(即,不仅仅是EntityX和EntityZ)。
首先要做的是找出你有哪些实体,这和从列表中选择它们并使用Distinct一样简单。然后,您需要按月和年进行分组,并使用实体列表来构建类似字典的内容(key=Entity name value=sum of 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)
});现场示例:http://rextester.com/RGV51846
发布于 2016-08-31 16:57:43
有点令人困惑,但从您的预期输出中,您需要对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
});https://stackoverflow.com/questions/39244661
复制相似问题