2014-09-09 3 views
2

Как я могу суммировать столбец в Entity Framework и привязать его к метке?C# entity framework sum timespan

var result = (from t in db.aktivitaet 
          where t.idrapport == idrapport 
          group t by t.aktotal into d 
         select d).Sum(); 

      lblsum.Text = Convert.ToString(result.Sum(res => res)); 

Что-то вроде этого, но если это возможно, я хочу сделать это с .toList(), как это:

var result = (from t in db.aktivitaet 
          where t.idrapport == idrapport 
         select new 
         { 
          t.aktotal 
         }).ToList(); 
      double sum = 0; 
      foreach (var item in result) 
      { 
       sum += Convert.ToDouble(item.aktotal); 
      } 
      lblsum.Text = sum.ToString(); 

Но с помощью второго блока кода я получаю ошибку: Das Objekt des Typs \"System.TimeSpan\" kann nicht in Typ \"System.IConvertible\" umgewandelt werden.

ответ

0

Нет встроенного преобразования Convert.ToDouble для объекта timepan.

Попробуйте это:

 var result = (from t in db.aktivitaet 
         where t.idrapport == idrapport 
        select new 
        { 
         t.aktotal 
        }).ToList(); 
     double sum = 0; 
     foreach (var item in result) 
     { 
      sum += item.aktotal.HasValue ? item.aktotal.TotalSeconds : 0; 
     } 
     lblsum.Text = sum.ToString(); 

Обратите внимание, что единственным отличием является

sum += item.aktotal.HasValue ? item.aktotal.TotalSeconds : 0; 

Он не знает, что использовать в качестве представления промежутка времени без предоставления единицы измерения (в этом в секундах) - вы можете использовать TotalHours, TotalMilliseconds, TotalDay и т. д. - вам просто нужно указать единицу времени, в которой вы хотели бы представить время.

+0

Если бы я попробовать это с TotalSeconds не приходит сообщение об ошибке \t «System.Nullable » нет определения для «TotalSeconds» – twixwix

+0

К сожалению у меня была ошибка синтаксиса в ответ, обновили его. Обратите внимание, что сумма + = теперь учитывается, если значения равны нулю. – Kritner

+0

У меня была проблема с вашим ответом, потому что для TotalSeconds не существует deifnition, так это проще, если бы я сделал пример строки: from (00:01:00) + до (00:01:00) = String (2) – twixwix

1
var result = (from t in db.aktivitaet 
         where t.idrapport == idrapport 
        select new 
        { 
         t.aktotal 
        }).ToList(); 

var sum = result.Aggregate(TimeSpan.Zero, (total, next) => total.Add(next)); 

lblsum.Text = sum.ToString(); 

Это должно сделать трюк

Смежные вопросы