将行转换为linq中的列

时间:2011-07-28 04:38:24

标签: c# linq

我有以下查询:

var query = from q1 in lstAgentDetails
            join q2 in lstAgentMaterialPercentage on q1.Agent_Id equals q2.AMP_Agent_Id
            into list1
            from lu in list1.DefaultIfEmpty()
            join q3 in lstMaterialType on lu.AMP_MaterialType_Id equals              q3.MaterialType_Id into list2
                        from l2 in list2.DefaultIfEmpty()
                        select new
                        {
                            q1.Agent_Name
                            lu.AMP_percentage
                            q3.Materialtype_Name
                        };   
            IList iu = query.ToList();

查询结果如下:

agentname  material name     percentage
agent1     material1         20    
agent1     material2         10
agent2     material1         15
agent1     material3         25
agent3     material1         10
agent2     material2         30

但是,我希望结果采用以下格式:

agentname         material1         material2         material3   ...........
agent1            20                10                25          ..........
agent2            15                30                0           ..........
agent3            10                0                 0           ..........

请帮帮我。

1 个答案:

答案 0 :(得分:4)

第二个结果将为每个代理程序提供动态列数,因此无法使用静态类型表示,并且需要使用Dictionary为每个代理程序表示。

因此,您可以执行以下操作:(从代码中获取查询对象后)

query.GroupBy(a => a.Agent_Name).Select(g => {
  var dict = new Dictionary<string,long>();
  foreach(var i in g)
     dict.Add(i.Materialtype_Name,i.AMP_percentage);
  return new {AgentName=g.Key, Materials = dict}
});