2011-07-28 53 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