我在LINQ Group By Clause中使用Dictionary对象。
只要我在结果中没有重复的项目名称,它就可以正常工作。
但是,当 GroupBy 查询遇到重复的项目名称时,它会失败。
我不确定我是否正确使用了GroupBy子句中的Dictionary对象?请指教。
这是我的模特
public class Item
{
public string CustomerName { get; set; }
public Dictionary<string, float?> ItemCost { get; set; }
public float? Cost{ get; set; }
public float? TotalCost{ get; set; }
}
以下是我的选择查询(LINQ)以及GroupBy
var result = myFilteredQuery
.Select(x => new
{
ItemName = x.Item.Name,
Cost= x.Item.Cost,
CustomerName = x.Item.Customer.Name,
}).ToList();
以下是我的GroupBy查询。
return result .GroupBy(x => new { x.CustomerName})
.Select(x => new CostByItem
{
CustomerName = x.Key.CustomerName,
LineItem = x.ToDictionary(y => y.ItemName, y => y.Cost),
TotalCost= x.Sum(y => y.Cost)
}).ToList();
p.s。我正在尝试发送按客户分组的创建数据结构,而不是每个客户字典对象项目成本(项目名称,项目成本)和该客户的总成本。
答案 0 :(得分:1)
如果我理解正确,您希望按客户对项目进行分组,然后按名称对项目进行分组。您需要使用GroupBy
两次。
result.GroupBy(x => x.CustomerName)
.Select(x => new CostByItem
{
CustomerName = x.Key,
LineItem = x.GroupBy(y => y.ItemName)
.ToDictionary(y => y.Key, y => y.Sum(z => z.Cost)),
TotalCost = x.Sum(y => y.Cost)
}).ToList();
另请注意,无需使用x => new { x.CustomerName}
。按字符串值分组就足够了 - 不需要创建匿名类型。