我有以下查询:
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 ..........
请帮帮我。
答案 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}
});