首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.Linq从List<T>创建自定义对象

使用.Linq从List<T>创建自定义对象
EN

Stack Overflow用户
提问于 2016-08-31 16:37:54
回答 2查看 108关注 0票数 1

我正在尝试创建一个多维数组和后缀,使用相同的多维数组来创建图表,但我不知道如何实现。

下面是我想要实现的逻辑。

代码语言:javascript
复制
//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列表):

代码语言:javascript
复制
[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相同

代码语言:javascript
复制
[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或其他方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-31 17:19:12

这有点棘手,基于你所评论的实体可以是动态的(即,不仅仅是EntityXEntityZ)。

首先要做的是找出你有哪些实体,这和从列表中选择它们并使用Distinct一样简单。然后,您需要按月和年进行分组,并使用实体列表来构建类似字典的内容(key=Entity name value=sum of valor)。

这将会起作用。

代码语言:javascript
复制
// 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

票数 1
EN

Stack Overflow用户

发布于 2016-08-31 16:57:43

有点令人困惑,但从您的预期输出中,您需要对date进行分组,并执行以下操作。

代码语言:javascript
复制
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 
           });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39244661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档