Linq集团由专栏组成

时间:2017-03-29 10:46:32

标签: c# linq

我有一个包含代码属性的项目列表,我希望按 eventId 进行分组,并创建一个表格表示,其中代码值转换为列。 每个三元组(事件,代码,数量)都是唯一的。

我想改变这个

eventId code  amount  
  1      A     100
  1      B     101
  1      C     102
  2      A     103
  2      C     104
  3      B     105
  ....

到这个

eventId  A    B   C
 1      100  101 102
 2      103   0  104
 3       0   105  0
 ... 


var table=from x in list
    group x by x.eventId into gr
    select new
           {
              eventId=gr.Key,
              ....
           }

2 个答案:

答案 0 :(得分:2)

您需要对分组结果进行过滤并投影到匿名对象:

[0, 1, 2, 3, 4, 5, 6, 7]
[1, 5, 9, 13]

答案 1 :(得分:0)

使用查找实际上非常简洁:

var table =
    from x in list
    group x by x.eventId into gr
    let lookup = gr.ToLookup(y => y.code, y => y.amount)
    select new
    {
        eventId = gr.Key,
        A = lookup["A"].Sum(),
        B = lookup["B"].Sum(),
        C = lookup["C"].Sum(),
    };

我得到了这个结果:

query