c#实体框架总和时间跨度

时间:2014-09-09 12:37:46

标签: c# entity-framework sum tolist

如何在实体框架中对列进行求和并绑定标签?

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.

2 个答案:

答案 0 :(得分: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();

这应该可以解决问题

答案 1 :(得分:0)

对于timepan对象,没有内置的Convert.ToDouble转换。

试试这个:

        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等 - 您只需指定时间单位您希望将时间长度表示为。