如何解决在 LINQ to SQL 中获取分组数字字段的 SUM 为 hh:mm
我有一个 numeric(15,5) 类型的字段,它表示我需要在 LINQ to SQL 语句中进行分组和求和的时间
在 SQL 中,我已经计算出以下查询会将值转换为分钟并将其求和,然后我可以对数据应用进一步的计算以将其转换为 hh:mm
SELECT
StaffID,sum(DATEDIFF(MINUTE,'0:00:00',CAST(CONVERT(VARCHAR,DATEADD(SECOND,HrsWorked * 3600,0),108) AS TIME)) )
from dbo.StaffHours
Group by StaffID
但是我无法在 LINQ 中表示这一点。是否有可能或有更简单的方法来做到这一点?
为清楚起见,我正在处理第 3 方数据,无法获得有关如何捕获数据的明确答案,但我假设 5.83300 的值等于基于上述转换的 349 分钟
解决方法
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace StackOverflowSandbox
{
public static class Program
{
public static void Main()
{
var staffHours = GetStaffHours().ToArray();
// Using extensions
var totalViaExtensions = staffHours
.GroupBy(x => x.StaffID,(StaffId,lines) => new
{
StaffId,TotalTime = lines
.Aggregate(TimeSpan.Zero,(sum,line) => sum + TimeSpan.FromHours(line.HrsWorked))
.TotalMinutes
});
// Using C# LINQ
var totalViaLINQ = from x in staffHours
group x by x.StaffID
into staffMember
select new
{
StaffId = staffMember.Key,TotalTime = staffMember
.Aggregate(TimeSpan.Zero,line) => sum + TimeSpan.FromHours(line.HrsWorked))
.TotalMinutes
};
}
public static IEnumerable<StaffHours> GetStaffHours()
{
// Placeholder
return Enumerable.Empty<StaffHours>();
}
}
public class StaffHours
{
public int StaffID { get; set; }
public double HrsWorked { get; set; }
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。