2011-07-28 5 views
3

나는 다음과 같은 쿼리가 :는 LINQ에서 행을 열로 변환

: 나는 다음과 같은 형식으로 결과를 원하는, 그러나

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

:

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   material1   material2   material3 ........... 
agent1   20    10    25   .......... 
agent2   15    30    0   .......... 
agent3   10    0     0   .......... 

도와주세요.

답변

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

감사 Ankur을, 당신이 그런 선택을 쓸 수 몰랐다. – Justin

관련 문제