c# - 将列表转换为字典并使用 linq 求和值

标签 c# linq

我有列表,即 List<Field> .这个 Field 类在其他字段中包含一个代码和一个值属性,我希望能够使用 linq 来总结同一代码的所有值。

我知道我可以循环遍历列表并使用以下代码将其添加到字典中,但我确信必须有更简洁的方法来执行此操作:

if (totals.ContainsKey(code))
{
  totals[code] += value;
}
else
{
  totals.Add(code, value);
}

有什么想法吗?

我发现了类似的东西,但这适用于列表>这不是我所拥有的:

var result = Sales.SelectMany(d => d) // Flatten the list of dictionaries
             .GroupBy(kvp => kvp.Key, kvp => kvp.Value) // Group the products
             .ToDictionary(g => g.Key, g => g.Sum());

来自这篇文章 [在 <List<Dictionary<string, int>> 中使用 Linq 求和] Sum amount using Linq in <List<Dictionary<string, int>>

有什么想法吗?我总是可以更改我的代码以获得 Dictionary<string, Field>但我确信必须有一种方法可以使用列表和 linq 来做到这一点。

谢谢。

我有列表,即 List<Field> .这个 Field 类在其他字段中包含一个代码和一个值属性,我希望能够使用 linq 来总结同一代码的所有值。

我知道我可以循环遍历列表并使用以下代码将其添加到字典中,但我确信必须有更简洁的方法来执行此操作:

if (totals.ContainsKey(code))
{
  totals[code] += value;
}
else
{
  totals.Add(code, value);
}

有什么想法吗?

我发现了类似的东西,但这适用于列表>这不是我所拥有的:

var result = Sales.SelectMany(d => d) // Flatten the list of dictionaries
             .GroupBy(kvp => kvp.Key, kvp => kvp.Value) // Group the products
             .ToDictionary(g => g.Key, g => g.Sum());

来自这篇文章 [在 <List<Dictionary<string, int>> 中使用 Linq 求和] Sum amount using Linq in <List<Dictionary<string, int>>

有什么想法吗?我总是可以更改我的代码以获得 Dictionary<string, Field>但我确信必须有一种方法可以使用列表和 linq 来做到这一点。

谢谢。

更新:

抱歉,关于上述内容,我想我省略了一个重要部分。该列表包含在另一个列表中,即 List> myitemList;其中将包含其他可能需要进一步过滤的不相关字段。我不确定???

注意:抱歉,格式又一次搞砸了!

为此提供一些背景信息:

Item1(列表类型)

项目名称值

(项目 1)类型 1 (第 2 项)描述测试 (第 3 项)代码 A (第 4 项) Netty 100.00

Item2(列表类型)

项目名称值

(项目 1)类型 2 (第 2 项)描述 Test1 (第 3 项)代码 B (第4项) Net 95.55

Item3(列表类型)

项目名称值

(项目 1)类型 2 (第 2 项)描述 Test2 (第 3 项)代码 A (第4项) Net 35.95

如您所见,每个 List 类型的列表都包含 4 个 Field 条目,其中我的 Field 是用名称(字符串)和值(对象)定义的

然后将这些列表中的每一个添加到主列表中。所以我需要遍历主列表,然后我想得到一个字典,其中包含每个列表的“代码”和“网络”总和。所以最后,我应该结束

A, 135.95 B、95.55

不知道上面说的对不对。我希望如此!

更新

我正在处理一个列表的事实>实际上并没有什么不同,因为我当时实际上想总结一个列表,所以提供的答案是正确的!谢谢!

最佳答案

您发布的代码几乎就是您所需要的——为了在列表中使用它,您需要稍微简化一下:

var result = myList                             // No flattening
    .GroupBy(x => x.Code)                       // Group the items by the Code
    .ToDictionary(g => g.Key, g => g.Sum(v => v.Value)); // Total up the values

关于c# - 将列表转换为字典并使用 linq 求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795407/

相关文章:

c# - 创建 IHttpActionResult 以返回已接受的状态代码

linq - 使用 LINQ 和 ReSharper 时如何摆脱 "Possible System.NullReferenceException"警告?

linq - 带 Take 和不带 Take 的 linq 查询有什么区别?

c# - 有没有办法将可观察集合转换为常规集合?

c# - 试图创建一个包含结构的数组?

c# - 用于整数的二进制表示的 Winforms 控件

c# - 使用 Linq 比较两个列表以进行部分匹配

c# - 动态创建T时typeof(T)为null?

c# - 如何将此 LINQ 与多个 "Where"一起使用?

c# - YamlDotNet 将整数反序列化为数字而不是字符串