我有我想要做一些事情来的效果MSSQL 2008数据库时间字段:Linq到SQL,求和时间?
Timespent = x.sum(x => x.AmountOfTime);
凡AmountOfTime是一个时间MSSQL场。总结似乎只适用于小数,我如何添加这些列?
我有我想要做一些事情来的效果MSSQL 2008数据库时间字段:Linq到SQL,求和时间?
Timespent = x.sum(x => x.AmountOfTime);
凡AmountOfTime是一个时间MSSQL场。总结似乎只适用于小数,我如何添加这些列?
您可能想要将时间段转换为时间间隔 - 如有必要,可以从结束时间减去开始时间。请注意,TIME类型代表瞬间,而不是持续时间。在标准的SQL中,你需要INTERVAL HOUR TO SECOND。我不确定微软是否支持这一点 - 还有其他主要的DBMS不支持。如果你遇到TIME,你应该能够从值中减去TIME'00:00:00'并得到可行的结果(这将是一个INTERVAL)。
区间的一个特别的好处是,你确实可以通过SUM来添加它们。
有关详细信息,您可以在MSDN(或通过Google)以及我可以手动打bash。
如果SQL构造不支持这个,你不能......为什么不制作一个具有时间数字表示的特殊字段,然后你可以使用SQL将它添加到一起。
我解决了这个使用下面的方法,因为你有你的表中的开始和结束日期时间:
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);
不起作用的服务器端 – usr 2010-10-14 16:47:00
它的工作原理,但问题是你要求从数据库中找到所有条目来计算总和。根据表的大小,这可能不够高效。 – 2010-12-29 22:15:10