所以我有一个对象列表:
class myObj{
string type;
int amount;
}
如何按“类型”字段进行分组,总结每种类型下的金额,然后将结果放入字典?这是我得到的:
myList
.GroupBy(x=>x.type)
.ToDictionary(
x=>x.Key,
x=>x.GetEnumerator().Sum(y=>y.amount)
);
我得到的错误是:
IEnumerator does not contain a definition for Sum
要小心它说“IEnumerator”而不是IEnumerable。
答案 0 :(得分:3)
您不需要致电GetEnumerator()
,只需在群组中使用Sum()
方法:
myList.GroupBy(x => x.type)
.ToDictionary(x => x.Key, x => x.Sum(y => y.amount));
Sum()
是IEnumerable<T>
的扩展方法,而不是IEnumerator<T>
的扩展方法。由于IGrouping<TKey, TElement>
继承自IEnumerable<TElement>
,因此您可以在此类对象中使用 Linq 扩展名。
答案 1 :(得分:0)
见下面的代码:
myList
.GroupBy(x=>x.type)
.ToDictionary(
x=>x.Key,
x=>x.Sum(y=>y.amount)
);
IGrouping<Key, T>
是IEnumerable<T>
答案 2 :(得分:0)
你需要一个集合对象myObj。使用List&lt;&gt;更容易对象如下面的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<myObj> objs = new List<myObj>();
Dictionary<string, int> dict = objs.AsEnumerable()
.GroupBy(x => x.type, y => y)
.ToDictionary(x => x.Key, y => y.Select(z => z.amount).Sum());
}
}
public class myObj
{
public string type { get; set; }
public int amount { get; set; }
}
}