【问题标题】:linq to sql under the hood: why can't i query a date/time range less than 48 hours using linq to sql?linq to sql 底层:为什么我不能使用 linq to sql 查询少于 48 小时的日期/时间范围?
【发布时间】: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 &gt; startDate And l.DateProcessed &lt; endDate Select l.Epi) 返回 null
  • 如果你用“Count”代替“Sum”,它会出错吗?如果不是,返回值是多少?

标签: .net vb.net linq


【解决方案1】:

问题是,如果你没有整数值,那么这个总和就不起作用。 sum 可以毫无问题地用于整数数组,或者如果您传入一个匿名函数来解析应该是整数的属性。

此外,对结果求和是没有意义的。

.sum 用于对数组中的所有整数求和,而 count 只计算数组中的所有项目。

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多