【问题标题】:LINQ to Entities- Time difference in Hours coming incorrectLINQ to Entities- 小时的时差不正确
【发布时间】:2013-08-21 10:19:03
【问题描述】:

我的 Sql Server 数据库中有一个名为“视频”的表。我正在使用 LINQ to Entities 从 C# 应用程序访问该数据库中的数据。 “视频”表包括名为“RecordingStarted”和“RecordingEnded”的两列,它们只会告诉我们录制视频的开始和结束日期时间。每个视频都有一个唯一的 ID,并针对一个单元进行记录(这里我的意思是单元,例如手机)。

“视频”表示例数据如下:

UnitID  VideoID        RecordingStarted            RecordingEnded
====================================================================
Unit-1  vid1           2012/1/1 14:30:00           2012/1/1 15:45:10
Unit-1  vid2           2012/2/1 12:30:00           2012/1/1 12:50:00
Unit-2  vid3           2012/3/1 14:30:00           2012/3/1 15:45:10
Unit-2  vid4           2012/4/1 12:30:00           2012/4/1 12:40:00

使用 LINQ to Entities 我想为报告和每个单元计算聚合数据,例如每个单元记录的视频总时数。

输出应如下所示:

UnitID     Total Video Hours
================================================
Unit-1      0.58611
Unit-2      0.41944

我创建了以下 LINQ to entity 查询,但它没有给我正确的结果。 (我猜小时数除以 3600 时四舍五入为 0)

IQueryable<dynamic> qry = myContext.Videos
.GroupBy(v => new { v.UnitID })
.Select(g => new
{
    g.Key.UnitID,
    TotalVideoHours = g.Sum(c => SqlFunctions.DateDiff("s", c.RecordingStarted, c.RecordingEnded)/3600)
});

var result = qry.ToList();

另外:我需要将小时数四舍五入为 2 位数,(直接来自 Sql Server,以后不使用内存操作)。

我该怎么做?请帮忙。

【问题讨论】:

    标签: c# sql-server linq-to-entities aggregate


    【解决方案1】:

    您的原始代码除以 3600,这会截断除以 3600 时得到的小数小时数:您需要改用 3600.0。然后,我们可以使用 EntityFunctions.Truncate 进行故意截断,以获得漂亮的 2 位格式。也不知道为什么你需要IQueryable&lt;dynamic&gt;

    var qry = s.Videos
    .GroupBy(v => new { v.Name })
    .Select(g => new
    {
        g.Key.Name,
        TotalVideoHours = EntityFunctions.Truncate(g.Sum(c => SqlFunctions.DateDiff("s", c.RecordingStarted, c.RecordingEnded) / 3600.0), 2)
    });
    

    【讨论】:

    • 3600.00。忽略了这么简单的事情 :) 关于“动态”的使用,这是我后来在我的应用程序中用于其他场景的额外内容。实际上这里不需要。一个“var”在这里就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2019-01-30
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多