我有我想要做一些事情來的效果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