使用Linq / Lambda对包括非分组字段的分组进行分组

时间:2015-10-08 21:47:19

标签: c# linq lambda

我有一个包含数据的列表

:Camera

我正在使用Linq查询对数据进行分组

list1 [{actId: 1, dt:'10/5/2015', hr:3}, {actId: 1, dt:'10/5/2015', hr:5},
        {actId: 3, dt:'10/4/2015', hr:3}, {actId: 4, dt:'10/6/2015', hr:1},
        {actId: 4, dt:'10/6/2015', hr:8}, {actId: 1, dt:'10/2/2015', hr:3}]

这有效并给了我结果,但是给了我将“actId”和“dt”分组的结果,而我想用“actId”对它们进行分组。如果我将查询更改为

 var dat= list1.AsEnumerable().GroupBy(t=> new{t.actId, t.dt})
     .Select(x=> new 
            {
               tId=x.Key.techId,
               dat=x.Key.dt,
               thrs=x.Sum(y=>y.hr)
            });

我得到x.dt的intellisense错误说“Cant Resolve Symbol”dt“

请让我知道如何更改查询,以便我可以在其中包含x.dt而不进行分组。 所以输出应该看起来像

     var dat= list1.AsEnumerable().GroupBy(t=> new{t.actId})
     .Select(x=> new 
            {
               tId=x.Key.techId,
               dat=x.dt,
               thrs=x.Sum(y=>y.hr)
            });

谢谢

1 个答案:

答案 0 :(得分:0)

这是因为没有一个单独的'它们有一组,这将把它们作为一组返回给你:

var dat=list1.AsEnumerable()
     .GroupBy(t=> t.actId)
     .Select(x=> new 
            {
               actId=x.Key,
               dat=x.Select(x=>new { x.dt,x.hr}).ToList()
            });

这与我输出的结果非常接近。它看起来像是:

 [ {actId:1, dat:[{dt: 10/5/2015, hr:8}, {dt: 10/2/2015, hr:38}]},
  {actId: 3, dat:[{dt: 10/4/2015, hr:3}]},
   {actId: 4, dat:[{dt: 10/6/2015 hr: 9}]}]