我有一组通过,我想找到两个日期之间的差值,然后将结果添加到最终的总和。但是我不断收到无法从时间跨度转换为Long的错误。 这是我使用的代码:LINQ的日期时间差和
var summary = (
from p in db.CP_SDV_Acc
where p.Scandate >= start && p.EndDate <= end && p.Device==divice
let k = new
{
//try this if you need a date field
// p.SaleDate.Date.AddDays(-1 *p.SaleDate.Day - 1)
Device = p.Device,
}
group p by k into t
select new OeeRecovery
{
Device = t.Key.Device,
GoodPcs = t.Sum(p => p.GoodPcs),
BadPcs=t.Sum(p=>p.BadPcs),
Oee =(decimal)(t.Sum(p => p.GoodPcs)- t.Sum(p => p.BadPcs))/t.Sum(p => p.GoodPcs),
WorkTime = t.Sum(x=>new TimeSpan(x.EndDate-x.Scandate).TotalMilliseconds??TimeSpan.Zero)
//t.Sum(new TimeSpan(p => p.EndDate - p.Scandate))
//t.Aggregate(TimeSpan.Zero, (total, it) =>total += (it.EndDate-it.Scandate)),
}).ToList();
WorkTime
是TimeSpan
类型和Enddate
和scandate
是DateTime
类型。
我怎么能得到时间跨度的总和?
确实与空聚结操作者此表达式(''??)甚至编译? 'new'将总是返回一个实例,所以你期望在这里有什么?请注意,'TotalMilliseconds'是一个'double','TimeSpan.Zero'是一个'TimeSpan'。 –
我得到的(x.EndDate-x.Scandate)错误此 – user3399295
最快的修复(只是为了得到它没有失败,将TimeSpan.Zero改变TimeSpan.Zero.TotalMilliseconds。然后,两个空的部分coalese将返回相同的类型,然后它会自动装箱到Long。此外,你不需要新的TimeSpan,因为减去两个日期值会返回一个TimeSpan,所以你可以这样做:(x.EndDate- x.ScanDate).TotalMilliseconds ?? TimeSpan.Zero.Milliseconds,或者更简单(x.EndDate-x.ScanDate).TotalMilliseconds ?? 0 –