簡體   English   中英

LINQ與GroupBy一起使用字典對象

[英]LINQ using dictionary object with GroupBy

我在LINQ Group By子句中使用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();

ps我正在嘗試發送創建數據結構“按客戶分組”,然后在每個客戶詞典對象的“項目成本”(項目名稱,“項目成本”)和該客戶的總成本下發送。

如果我的理解正確,您想按客戶對項目進行分組,然后在該項目下按名稱對項目進行分組。 您需要使用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} 按字符串值分組就足夠了-無需創建匿名類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM