我有清单即List<Field>.这个Field类包含一个代码和一个值属性以及其他字段,我希望能够使用linq来总结相同代码的所有值.
我知道我可以遍历我的列表并使用以下代码将其添加到字典中,但我确信必须有一个更简洁的方法来执行此操作:
if (totals.ContainsKey(code))
{
totals[code] += value;
}
else
{
totals.Add(code, value);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我找到了类似的东西,但这应用于列表>这不是我所拥有的:
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());
Run Code Online (Sandbox Code Playgroud)
来自本文[使用Linq in的总和<List<Dictionary<string, int>> ] 使用Linq在<List <Dictionary <string,int >>中的总和
有任何想法吗?我总是可以改变我的代码,Dictionary<string, Field>但我确信必须有一种方法来使用list和linq.
谢谢.
我有清单即List<Field>.这个Field类包含一个代码和一个值属性以及其他字段,我希望能够使用linq来总结相同代码的所有值.
我知道我可以遍历我的列表并使用以下代码将其添加到字典中,但我确信必须有一个更简洁的方法来执行此操作:
if (totals.ContainsKey(code))
{
totals[code] += value;
}
else
{
totals.Add(code, value);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我找到了类似的东西,但这应用于列表>这不是我所拥有的:
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());
Run Code Online (Sandbox Code Playgroud)
来自本文[使用Linq in的总和<List<Dictionary<string, int>> ] 使用Linq在<List <Dictionary <string,int >>中的总和
有任何想法吗?我总是可以改变我的代码,Dictionary<string, Field>但我确信必须有一种方法来使用list和linq.
谢谢.
更新:
对不起,我想我省略了有关上述内容的重要部分.该列表包含在另一个列表中,即List> myitemList; 其中包含其他可能需要进一步过滤的无关字段.我不确定???
注意:抱歉格式化再次搞砸了!
为此提供一些上下文:
Item1(List类型)
(项目1)类型1(项目2)描述测试(项目3)代码A(项目4)净100.00
Item2(List类型)
(项目1)类型2(项目2)描述测试1(项目3)代码B(项目4)净95.55
Item3(List类型)
(项目1)类型2(项目2)描述测试2(项目3)代码A(项目4)净35.95
正如您所看到的,List列表中的每个列表包含4个字段条目,其中我的字段定义为Name(String)和Value(Object)
然后将这些列表中的每一个添加到主列表中.所以我需要遍历主列表,然后我想最终得到一个字典,其中包含每个列表的"代码"和"网络"的总和.所以最后,我应该结束
A,135.95 B,95.55
我不知道上面是否有意义.我希望它能做到!
UPDATE
事实上,我正在处理一个列表>实际上并没有因为我当时想要总结一个列表而有所不同,所以提供答案是正确的!谢谢!
das*_*ght 11
您发布的代码几乎就是您所需要的 - 要在列表中使用它,您需要稍微简化它:
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
Run Code Online (Sandbox Code Playgroud)
你可以做:
Dictionary<string, int> dictionary =
list.GroupBy(r => r.ID)
.ToDictionary(grp => grp.Key, grp => grp.Sum(r => r.Value));
Run Code Online (Sandbox Code Playgroud)
考虑到你有这样的课程:
public class MyClass
{
public string ID { get; set; }
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7132 次 |
| 最近记录: |