Sum * Columns其中的日期

时间:2013-08-30 13:43:42

标签: c# linq

我是LINQ的新手,有一个简单的语句,可以选择两个日期之间的所有列。

我想对每一栏进行总结。我在获取sql语句时遇到了一些麻烦。

   var PumaGoodProduct = (
            from item in db.tbl_dppITHr
            where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
            orderby item.ID descending
            select item).Sum();

以下我得到一个错误说.ProductionHour不包含总和的定义。

我也试过这个

        var PumaGoodProduct = (
            from item in db.tbl_dppITHr
            where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
            orderby item.ID descending
            select item).Take(1);

对此有任何想法都非常感谢。

我想选择item.MachineTotal和item.MachineClocks都是整理

4 个答案:

答案 0 :(得分:1)

如果你只是做一笔钱,你不需要订购。此外,您还需要选择要汇总的属性。

var PumaGoodProduct = (
    from item in db.tbl_dppITHr
    where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
    select item).Sum(x => x.MySumProperty);

MySumProperty替换为您要求总和的任何属性。

答案 1 :(得分:0)

由于您计算了两个总和,因此在单个返回类型中组合它们的一种方法是:

var PumaGoodProduct =
    new
        {
            MachineTotalSum =
                (from item in db.tbl_dppITHr
                    where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
                    select item).Sum(x => x.MachineTotal),

            MachineClocksSum =
                (from item in db.tbl_dppITHr
                    where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
                    select item).Sum(x => x.MachineClocks),
        };

答案 2 :(得分:0)

您希望从查询中针对列item.MachineTotalitem.MachineClock返回多个总和,您可以尝试以下操作。

var result =  (from item in db.tbl_dppITHr
              where item.ProductionHour >= StartShift 
                    && item.ProductionHour <= EndDate
              select new 
                   {
                     SumMachineTotal = item.MachineTotal, 
                     SumMachineClock = item.MachineClock
                   }).FirstOrDefault();

if(result != null)
{
   Console.WriteLine("Machine Total Sum: {0}" , result.SumMachineTotal);
   Console.WriteLine("Machine Clock Sum: {0}" , result.SumMachineClock);
}

您不需要orderby,因为Sum会计算总和而不管orderby子句。

答案 3 :(得分:0)

我打算猜测一下。您希望获取给定MachineTotalMachineClocks期内db.tbl_dppITHr项中StartShift项和EndDate字段的总和。

你可以这样做:

var PumaGoodProduct = db.tbl_dppITHr
        .Where(item => item.ProductionHour >= StartShift && item.ProductionHour <= EndDate)
        .Aggregate(new { MachineTotalSum = 0, MachineClocksSum = 0 },
        (sums, item) => new
        {
            MachineTotalSum  = sums.MachineTotalSum  + item.MachineTotal,
            MachineClocksSum = sums.MachineClocksSum + item.MachineClocks
        });

Console.WriteLine("MachineTotalSum  : {0}", PumaGoodProduct.MachineTotalSum);
Console.WriteLine("MachineClocksSum : {0}", PumaGoodProduct.MachineClocksSum);