如果之前有人问过这个问题,我深表歉意,但我不确定我是否问了正确的问题。 这是我的问题:
我有这样的数据
AA01 JAN 100
AA01 JAN 200
AA01 FEB 200
AA02 JAN 50
AA03 FEB 500
AA03 MAR 250
AA03 MAR 75
我想把它变成一个结果 IEnumerable,看起来像这样:
Result{
string Key,
int Jan,
int Feb,
int Mar,
...
}
IEnumerable<Result> results = .....
KEY JAN FEB MAR
AA01 300 200 0
AA02 50 0 0
AA03 0 500 325
如果有帮助,月份列是固定的,但我不知道如何让 linq 查询产生这些结果? 我可以重复迭代数据并在标准循环中添加到结果中,但这听起来像是错误的方法。
感谢您的帮助:)
最佳答案
这是我知道的最简单的方法:
var query =
from r in records
group r by r.Key into grs
let ms = grs.ToLookup(gr => gr.Month, gr => gr.Value)
select new
{
grs.Key,
JAN = ms["JAN"].Sum(),
FEB = ms["FEB"].Sum(),
MAR = ms["MAR"].Sum(),
// ...
DEC = ms["DEC"].Sum(),
};
从计算的角度来看,一种更灵活的替代方法是不完全按照您想要的格式执行此操作:
var months = Enumerable
.Range(0, 12)
.Select(m =>
String
.Format("{0:MMM}", new DateTime(2011, m + 1, 1))
.ToUpper());
var query =
from r in records
group r by r.Key into grs
let ms = grs.ToLookup(gr => gr.Month, gr => gr.Value)
select new
{
grs.Key,
Months =
from m in months
select ms[m].Sum(),
};
关于c# - 如何在 Linq 中进行汇总?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7171549/