Linq:GroupBy 和 Sum
Linq: GroupBy and Sum
我正忙于思考 LINQ。
我正在查询数据库
C 列日期
25-04-2016 10
01-05-2016 8
10-05-2016 4
我需要按年和月进行分组和求和。
我试过这样做但是没用:
public TYPE getX(DateTime value) {
var total = from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Year into dp
select new
{
result = dp.Sum(s => s.ColumnC),
};
return total;
}
我也不知道 return 类型。
换句话说:
如何从中获取 linq 查询:
select Month(date) Month ,sum(ColumnC) result
from table
group by(Month(date))
==============
提前致谢
您在此处的 return 类型部分 anonymous,这意味着您永远无法知道类型。
但是,您可以直接检索结果作为分组的一部分:
public IEnumerable<IGrouping<int, decimal>> getTotalHeures(DateTime value)
{
var total = from p in context.table
.Where(p => p.date.Year == value.Year)
.GroupBy(p => p.date.Month, p => p.ColumnC);
return total;
}
如果你想得到结果,你必须明确地转换你的总和,因此会丢失一些数据。这是必要的,因为您的初始数据是十进制的。因此代码:
var total = (from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Month into dp
select new KeyValuePair<int,int> (dp.Key, (int)dp.Sum(s => s.ColumnC))
);
这将是 IQueryable<KeyValuePair<int,int>>
的结果,这也是 知道类型 的一种方法。
第二个更正确的选项是不将小数转换为整数,因此代码:
var total = (from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Month into dp
select new KeyValuePair<int,decimal> (dp.Key, dp.Sum(s => s.ColumnC))
);
结果将是 IQueryable<KeyValuePair<int,decimal>>
,这很容易处理。
在这两种情况下,键都是月份,值是列 C 的总和
我正忙于思考 LINQ。 我正在查询数据库
C 列日期
25-04-2016 10
01-05-2016 8
10-05-2016 4
我需要按年和月进行分组和求和。
我试过这样做但是没用:
public TYPE getX(DateTime value) {
var total = from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Year into dp
select new
{
result = dp.Sum(s => s.ColumnC),
};
return total;
}
我也不知道 return 类型。
换句话说:
如何从中获取 linq 查询:
select Month(date) Month ,sum(ColumnC) result
from table
group by(Month(date))
==============
提前致谢
您在此处的 return 类型部分 anonymous,这意味着您永远无法知道类型。
但是,您可以直接检索结果作为分组的一部分:
public IEnumerable<IGrouping<int, decimal>> getTotalHeures(DateTime value)
{
var total = from p in context.table
.Where(p => p.date.Year == value.Year)
.GroupBy(p => p.date.Month, p => p.ColumnC);
return total;
}
如果你想得到结果,你必须明确地转换你的总和,因此会丢失一些数据。这是必要的,因为您的初始数据是十进制的。因此代码:
var total = (from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Month into dp
select new KeyValuePair<int,int> (dp.Key, (int)dp.Sum(s => s.ColumnC))
);
这将是 IQueryable<KeyValuePair<int,int>>
的结果,这也是 知道类型 的一种方法。
第二个更正确的选项是不将小数转换为整数,因此代码:
var total = (from p in context.table
.Where(p => p.date.Year == value.Year)
group p by p.date.Month into dp
select new KeyValuePair<int,decimal> (dp.Key, dp.Sum(s => s.ColumnC))
);
结果将是 IQueryable<KeyValuePair<int,decimal>>
,这很容易处理。
在这两种情况下,键都是月份,值是列 C 的总和