【发布时间】:2013-01-10 02:00:50
【问题描述】:
我不明白 linq-to-sql 错误似乎涉及 linq to sql 如何在“幕后”工作。
我有一个 linq to sql 查询来查找日期范围内的值。查询的所有字段在基础数据库中都没有空值。如果开始日期和结束日期相隔小于 48 小时,则查询返回错误,可为空的对象必须有值。
Dim startDate As Date = New Date(2013, 1, 5, 0, 0, 1)
Dim endDate As Date = New Date(2013, 1, 6, 23, 59, 59) //date interval less than 48 hours
Dim count As Integer = (From l In myDB.myTable Where l.LabName = labToCheck And l.SuccessfulImport = True And l.DateProcessed > startDate And l.DateProcessed < endDate Select l.Epi).Sum //Nullable object must have a value.
另一方面,当日期相隔超过 48 小时时(在下面的示例中,第二行不同),它不会抛出错误:
Dim startDate As Date = New Date(2013, 1, 5, 0, 0, 1)
Dim endDate As Date = New Date(2013, 1, 7, 23, 59, 59) //date interval more than 48 hours
Dim count As Integer = (From l In myDB.myTable Where l.LabName = labToCheck And l.SuccessfulImport = True And l.DateProcessed > startDate And l.DateProcessed < endDate Select l.Epi).Sum
发生了什么事? LINQ to SQL 是否忽略时间值?无论关联的时间值如何,2013 年 1 月 5 日数据库中的所有日期时间是否均等?这是我对这个错误的解释,因为如果 linq to sql 忽略时间值,则不会有大于 1/5/13 和小于 1/6/13 的可能值,因此生成消息:可为空的对象必须有错误.
发生了什么事?
【问题讨论】:
-
您确定您有 2013 年 1 月 5 日至 2013 年 1 月 6 日范围内的数据吗?这可以解释错误。
-
是的。我们在这两个日期的上午 10:19 左右处理了数据
-
我在代码中看不到可为空的对象。您的代码中的可空对象在哪里?我认为
DateProcessed可以为空但没有价值。 -
@HamletHakobyan - 我的假设是
(From l In myDB.myTable Where l.LabName = labToCheck And l.SuccessfulImport = True And l.DateProcessed > startDate And l.DateProcessed < endDate Select l.Epi)返回 null -
如果你用“Count”代替“Sum”,它会出错吗?如果不是,返回值是多少?