繁体   English   中英

按日期时间分组时奇怪的LINQ / EF行为

[英]Odd LINQ/EF Behavior when Grouping by DateTime

我已经使用了几个月的代码,没有出现任何问题,今天突然出现日期时间溢出错误。

原始代码如下所示

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转换为日期时间时发生溢出

事实证明.Net DateTime.MinValue超出SQL CE DateTime可能值的范围。 从逻辑上讲,我不希望这是一个问题,因为1)我没有试图将值保存回数据库2)从数据库中提取的值无论如何都不为空,因此MinValue不应3)这部分代码直到最近才发挥作用。 哦,嗯,​​这与逻辑有什么关系?

多谢你们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM