Linq to sql Linq到sql,求和时间跨度?

Linq to sql Linq到sql,求和时间跨度?,linq-to-sql,sql-server-2008,datetime,timespan,Linq To Sql,Sql Server 2008,Datetime,Timespan,我在mssql 2008数据库中有一个时间字段,我想做一些事情来达到以下效果: Timespent = x.sum(x => x.AmountOfTime); 其中,AmountOfTime是一个时间MSSQL字段。Sum似乎只对小数起作用,如何添加这些列?如果SQL构造不支持此功能,则无法。。。为什么不创建一个具有时间数字表示形式的特殊字段,然后可以使用SQL将其相加。您可能希望将句点转换为间隔-如果需要,可以从结束时间中减去开始时间。请注意,时间类型表示瞬间,而不是持续时间。在标准S

我在mssql 2008数据库中有一个时间字段,我想做一些事情来达到以下效果:

Timespent = x.sum(x => x.AmountOfTime);

其中,AmountOfTime是一个时间MSSQL字段。Sum似乎只对小数起作用,如何添加这些列?

如果SQL构造不支持此功能,则无法。。。为什么不创建一个具有时间数字表示形式的特殊字段,然后可以使用SQL将其相加。

您可能希望将句点转换为间隔-如果需要,可以从结束时间中减去开始时间。请注意,时间类型表示瞬间,而不是持续时间。在标准SQL中,需要从小时到秒的时间间隔。我不确定微软是否支持这一点——还有其他主要的DBMS不支持。如果你被时间困住了,你应该能够从值中减去时间'00:00:00',得到一些可行的时间间隔

间隔的一个特别优点是,您确实可以通过求和将它们相加


有关详细信息,您可以在MSDN上手动bash,也可以通过Google和我一起手动bash。

我使用以下方法解决了这个问题,因为您的表上有开始和完成日期时间:

public TimeSpan AmountOfTime(IQueryable<Something> iq)
{
    TimeSpan ts = TimeSpan.Zero;
    foreach (Something a in iq.ToList())
        ts += (a.finishdatetime - a.startdatetime);
    return ts
}

它可以工作,但问题是您正在请求数据库中找到的所有条目来计算总和。根据表的大小,这可能不够有效。
double foo = AmountOfTime(datacontext.Where(conditions)).TotalHours;
public static class Extentions
{
    public static TimeSpan Sum<T>(this IEnumerable<T> items, Func<T, TimeSpan> selector)
    {
        var summ = TimeSpan.Zero;
        foreach(T item in items)
        {
            summ += selector(item);
        }
        return summ;
    }
}

var timespent = foo.Sum(f => f.finishdatetime - f.startdatetime);