我有一些代碼,我已經使用了幾個月沒有問題,突然今天我得到一個日期時間溢出錯誤。通過日期時間進行分組時出現奇怪的LINQ/EF行爲
原來的代碼看起來像這樣
var payments = (from p in context.Payments
where p.PaymentType == "Direct"
&& p.ExportFile == null
group p by new { p.Customer, p.DebtorID, p.ReceiptNumber, p.PaymentDate } into g
select new
{
g.Key.Customer,
g.Key.DebtorID,
amount = g.Sum(b => b.Amount) * -1,
ReceiptNumber = g.Key.ReceiptNumber ?? default(long),
PaymentDate = g.Key.PaymentDate != null ? (DateTime)g.Key.PaymentDate : DateTime.MinValue
}).ToList();
請告訴我奇怪的是,在這個特殊的情況下,代碼只選擇一行數據,看起來像這樣:
ID CUSTOMER DEBTORID AMOUNT RECEIPTNUMBER EXPORTFILE PAYMENTTYPE PAYMENTDATE
99 183245 672 5 419 NULL Direct 2015-06-10 00:00:00.000
漂亮的直線前進。日期沒有錯。
陌生人仍然,如果我做選擇沒有分組,它工作正常。
var payments = (from p in context.Payments
where p.PaymentType == "Direct"
&& p.ExportFile == null
select new
{
p.Customer,
p.DebtorID,
p.Amount,
p.ReceiptNumber,
PaymentDate = (DateTime)p.PaymentDate
}).ToList();
那麼,什麼給了?就像我說的,代碼通常工作正常,這使我相信數據有問題。但數據看起來也不錯。從SQL Server CE數據庫檢索我的數據可能是相關的。也許不會。
任何意見或建議?
「p.PaymentDate」的類型是什麼? – Steve
在數據庫中它是一個日期時間,它也接受null,所以在C#中,它是一個DateTime?這就是爲什麼我需要將它轉換爲DateTime。稍後,我將該值指定爲僅接受DateTime的對象的屬性。 –
也許這是一個下溢,並且'DateTime.MinValue'有一些問題。只是爲了測試將它替換爲'DateTime.UtcNow'並檢查錯誤是否消失。那麼你的代碼中會有最少的原因(但我無法解釋原因)。 – Oliver