2013-08-30 3 views
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 оба Интс

+2

что тип ProductionHour? – Save

+0

DateTime Мне не нужно суммировать этот feild. – Inkey

+3

Тогда что вам нужно суммировать? можете ли вы добавить какое-то описание элемента, а также то, какое свойство вы хотите суммировать? – Save

ответ

1

Вам не нужно заказывать, если вы просто делаете сумму. Кроме того, вам нужно будет выбрать, какое свойство вы суммируете.

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

Замените MySumProperty на любое имущество, которое вы хотите суммировать.

+0

Как суммировать более одного столбца? – Inkey

+0

Если вы ищете по значению, вы можете сделать '.Sum (x => x.MySumProperty1 + x.MySumProperty2);' Если вы хотите иметь два текущих итога, вам нужно будет изучить 'group by' – Khan

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), 
     }; 
0

Вы хотите вернуть несколько сумм из вашего запроса на колонке item.MachineTotal и item.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.

0

Я собираюсь рискнуть здесь. Вы хотите получить сумму как MachineTotal, так и полей MachineClocks пунктов в 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); 
Смежные вопросы