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

本文关键字:包括非 字段 Linq Lambda 使用 | 更新日期: 2023-09-27 18:16:46

我有一个包含data的列表

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}]

我正在使用Linq查询来分组数据

 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)
            });

这工作,给我的结果,但给我的结果分组"actId"answers"dt",而我想只是通过"actId"分组他们。如果我将查询改为

     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)
            });

我得到智能感知错误x.t t说"不能解析符号"dt"

请让我知道如何改变查询,这样我就可以包括x.t t在它没有分组。输出应该像

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

谢谢

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

这是因为没有一个'dt',而是一组'dt',这会将它们作为一个组返回给你:

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}]}]