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

2番目の結果は各エージェントの動的な列数を持つため、静的型を使用して表すことはできず、エージェントごとに辞書を使用して表現する必要があります。

だから、あなたのような何かを行うことができます:(あなたのコードからクエリオブジェクトを取得した後)

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

関連する問題