2

表格格式:

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 的值求和并将它们组合成一行。

我该怎么做呢?

4

3 回答 3

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
            };

Usinggrouping.First().ID将返回第一个 ID,尽管它们可能不同。在您的示例数据中,这将是“123”。

于 2012-07-02T13:19:57.350 回答
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;
}
于 2012-07-02T13:16:13.053 回答
2
var results = context.table.GroupBy( t=> t.GroupByThisColID)
    .Select( g => new CustomClass()
        {
            GroupByThisColID = g.Key,
            ColumnSum = g.Sum( p => p.NumberIWantToSum)
        });
于 2012-07-02T13:17:20.667 回答