按DateTime分组时的奇数LINQ / EF行为

时间:2015-06-25 14:55:56

标签: c# entity-framework linq datetime sql-server-ce

我有一些代码,我已经使用了几个月没有问题,突然间我今天收到了日期时间溢出错误。

原始代码如下所示

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数据库中检索我的数据可能是相关的。也许不是。

有任何建议或想法吗?

1 个答案:

答案 0 :(得分:0)

在奥利弗提出好的建议后,我发现了这一点:An overflow occurred while converting to datetime using EF4

原来,.Net DateTime.MinValue超出了SQL CE DateTime的可能值范围。从逻辑上讲,我不希望这是一个问题,因为1)我不是想将值保存回数据库2)我从数据库中提取的值无论如何都不为空,所以MinValue不应该'进入游戏,3)这段代码直到最近才起作用。哦,那个逻辑与它有什么关系呢?

谢谢,伙计们。