在LINQ中将行转换为列

4
我有以下查询:

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个回答

4
第二个结果对于每个代理商都有动态数量的列,因此无法使用静态类型表示,需要为每个代理商使用字典进行表示。
所以,你可以这样做:(在从代码中获取查询对象后)
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}
});

谢谢Ankur,我不知道你能写出这样的选择语句。 - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接