Linq to sql,求和时间跨度?

发布于 2024-07-14 12:58:33 字数 182 浏览 8 评论 0原文

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

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

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

I have a time field in a mssql 2008 database that I want to do something to the effect of:

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

Where AmountOfTime is a time MSSQL field. Sum seems to only work on decimals, how can I add these columns?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我家小可爱 2024-07-21 12:58:33

您可能希望将周期转换为间隔 - 如有必要,通过从结束时间减去开始时间。 请注意,TIME 类型表示瞬间,而不是持续时间。 在标准 SQL 中,您需要 INTERVAL HOUR TO SECOND。 我不确定 Microsoft 是否支持这一点 - 还有其他主要的 DBMS 不支持。 如果您受困于 TIME,您应该能够从值中减去 TIME '00:00:00' 并获得可行的值(这将是一个 INTERVAL)。

间隔的一个特殊优点是您确实可以通过 SUM 将它们相加。

有关详细信息,您可以像我一样在 MSDN(或通过 Google)手动 bash。

You probably want to convert the periods to intervals - if necessary, by subtracting the start time from the end time. Note that the TIME type represents an instant, not a duration. In standard SQL, you want INTERVAL HOUR TO SECOND. I'm not sure whether Microsoft supports that - there are other major DBMS that do not. If you are stuck with TIME, you should be able to subtract TIME '00:00:00' from the values and get something workable (that would be an INTERVAL).

One particular advantage of intervals is that you can indeed add them up via SUM.

For the details, you can manual bash at MSDN (or via Google) as well as I can.

微凉徒眸意 2024-07-21 12:58:33

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

If SQL construct doesn't support this, you can't... Why don't you make a special field which has a numeric representation of the time, and then you can add it together using SQL.

纵山崖 2024-07-21 12:58:33
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);
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);
吻风 2024-07-21 12:58:33

我使用以下方法解决了这个问题,假设您的表上有开始和结束日期时间:

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;

I solved this using the following method, given that you have a start and finish datetime on your table:

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

Then you can use it to get the total number of hours:

double foo = AmountOfTime(datacontext.Where(conditions)).TotalHours;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文