C# 是否可以选择一列的和,按另一列分组?

C# 是否可以选择一列的和,按另一列分组?,c#,.net,linq,linq-to-sql,sum,C#,.net,Linq,Linq To Sql,Sum,表格格式: Date | NumberIWantToSum | ID(PK) | ForeignKeyID 对于给定的ForeignKeyID,我希望使用Linq2SQL对具有相同日期的所有NumberWantToSum值求和,然后用行中的所有值填充我自己的自定义类的列表 这可能吗 因此,考虑到这些值: Date | NumberIWantToSum | ID(PK) | ForeignKeyID 1/1/1

表格格式:

Date   |   NumberIWantToSum   |   ID(PK)   |   ForeignKeyID
对于给定的ForeignKeyID,我希望使用Linq2SQL对具有相同日期的所有NumberWantToSum值求和,然后用行中的所有值填充我自己的自定义类的列表

这可能吗

因此,考虑到这些值:

    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的值相加并将它们合并到一行中


我该怎么做呢?

根据您的解释,
GroupByThisColdID
用于筛选,而不是分组。实际上,您希望按日期分组

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;
}
试试这个:

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”。

ID字段-它包含在预期结果中,但不包含在group by(或MIN/MAX/etc)中。那么它怎么知道选择123而不是124呢?这里缺少了一些东西…?也许我缺少了一些东西,但是一个2的组不应该产生1+12+14吗?我也不知道如何处理这个问题;为该列返回哪个并不重要(因为两者都是唯一的)。关于如何处理这个问题有什么建议吗?@JustinPihony-没有,因为44人的groupbythiscold是3,而其余的人只有2。我只希望返回GroupByThisColID为2的值(或者传入的参数是什么)。我不是LINQ方面的专家,但在TSQL中,您的2是where参数,日期是GROUPBY列。但是,您必须告诉它如何处理ID字段,否则它将为这里的每个唯一值返回一行,所以这不会求和。
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
            };