表格式:
Date | NumberIWantToSum | ID(PK) | ForeignKeyID
对于给定的ForeignKeyID,我想要使用Linq2SQL对所有具有相同日期的NumberIWantToSum值求和,然后使用该行中的所有值填充我自己的自定义类的列表。
这可能吗?
所以,给定值:
Date | NumberIWantToSum | ID(PK) | ForeignKeyID
1/1/1 1 123 2
1/1/1 12 124 2
1/1/1 44 125 3
1/1/2 14 126 2
我给这个方法的ForeignKeyID参数,我们假设它是2,所以这个方法应该返回行:
1/1/1 13 123 2
1/1/2 14 126 2
我尝试这样做:
(from o in context.table.Where(r => r.GroupByThisColID == GroupByThisColID)
select new CustomClass()
{
ID = o.ID,
Date = o.Date,
NumberIWantToSum = o.NumberIWantToSum,
ForeignKeyID = o.ForeignKeyID
}).ToList();
但是,这并不是对NumberIWantToSum的值求和,而是将它们组合成一行。
我该怎么做呢?
答案 0 :(得分:3)
根据您的说明GroupByThisColdID
用于过滤,而不是分组。你实际上想按日期分组。
试试这个:
var query = from o in context.table
where o.GroupByThisColID == GroupByThisColID
group o by o.Date into grouping
select new CustomClass()
{
ID = grouping.First().ID,
Date = grouping.Key,
SummedNumbers = grouping.Sum(g => g.NumberIWantToSum),
GroupByThisColID = grouping.First().GroupByThisColID
};
使用grouping.First().ID
将返回第一个ID,尽管它们可能不同。这将是您的样本数据中的“123”。
答案 1 :(得分:2)
var r = from x in table
group x by x.GroupByThisColID into g
select new
{
Key = g.Key,
Sum = g.Sum(i => i.NumberIWantToSum)
};
foreach (var x in r)
{
var key = x.Key;
var sum = x.Sum;
}
答案 2 :(得分:2)
var results = context.table.GroupBy( t=> t.GroupByThisColID)
.Select( g => new CustomClass()
{
GroupByThisColID = g.Key,
ColumnSum = g.Sum( p => p.NumberIWantToSum)
});