我有一組通過,我想找到兩個日期之間的差值,然後將結果添加到最終的總和。但是我不斷收到無法從時間跨度轉換爲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 –