我有一些代码已经使用了几个月,没有问题,今天突然出现日期时间溢出错误。
原始代码看起来像这个
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数据库中检索数据可能与此相关。也许不是。
有什么建议或想法吗?
在Oliver的一个好提示之后,我发现:使用EF4 转换到日期时间时发生溢出
事实证明。净日期时间。MinValue超出了SQL CE DateTime的可能值范围。从逻辑上讲,我不认为这会是一个问题,因为1)我没有试图将值保存回数据库2)我从数据库中提取的值无论如何都不是null,所以MinValue不应该发挥作用,3)这段代码直到最近才起作用。哦,逻辑和它有什么关系?
谢谢,伙计们。