Frage

Ich habe ein Zeitfeld in einer MSSQL 2008-Datenbank, die ich etwas zu den Auswirkungen von tun:

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

Wo AmountOfTime ist eine Zeit, MSSQL Feld. Summe scheint nur auf Dezimalstellen zu arbeiten, wie kann ich diese Spalten hinzufügen?

War es hilfreich?

Lösung

Sie wollen wahrscheinlich die Perioden Intervalle konvertieren - falls notwendig, durch die Startzeit von der Endzeit subtrahiert wird. Beachten Sie, dass der Typ TIME einen Augenblick darstellt, nicht eine Dauer. Im Standard-SQL, möchten Sie INTERVAL STUNDE an zweiter Stelle zu. Ich bin mir nicht sicher, ob Microsoft unterstützt, dass - es gibt andere wichtige DBMS, das nicht zu tun. Wenn Sie mit TIME stecken geblieben sind, sollten Sie in der Lage sein, Zeit zu subtrahieren '00: 00: 00' von den Werten und etwas bearbeitbar (das wäre ein Intervall)

.

Ein besonderer Vorteil der Intervalle ist, dass man in der Tat sie sich über den SUM hinzufügen können.

Für die Details können Sie manuell bash auf MSDN (oder über Google) sowie ich kann.

Andere Tipps

Wenn SQL-Konstrukt dies nicht unterstützt, können Sie nicht ... Warum Sie nicht über ein spezielles Feld machen, die eine numerische Darstellung der Zeit hat, und dann können Sie es zusammen fügen SQL.

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);

Ich löste dies die folgende Methode verwenden, da Sie eine Start- und endet auf dem Tisch haben:

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

Dann können Sie es verwenden, um die Gesamtzahl der Stunden zu bekommen:

double foo = AmountOfTime(datacontext.Where(conditions)).TotalHours;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top