2011-07-28 55 views
3

我有以下查询:转换行到列在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   .......... 

请帮我一把。

回答

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

感谢ANKUR,我不知道,你可以写一个选择这样的。 – Justin