0

我是 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

4 回答 4

1

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

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

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

于 2013-08-30T14:09:09.447 回答
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

于 2013-08-30T14:15:30.073 回答
0

我将在这里冒险猜测。您想要获取给定和期间中项目的MachineTotalMachineClocks字段的总和。db.tbl_dppITHrStartShiftEndDate

你可以这样做:

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);
于 2013-08-30T14:18:15.807 回答
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),
        };
于 2013-08-30T14:14:23.240 回答