English 中文(简体)
日期对目标质量的比较。 不适用
原标题:DateTime comparison in ObjectQuery.Where
  • 时间:2009-11-04 01:47:30
  •  标签:

我使用实体框架,我有一个通信实体。 质询有DATEMODIFIED财产,这是一个不可磨损的日期。 我试图建立一个能够按日期过滤通信的查询点,因此我制造了一个开端物体,并做如下工作:

Dim q As ObjectQuery(Of COMMENT) = _ 
   (From c In model.COMMENT Select c)

If startDate.HasValue Then
   q = q.Where(Function(c) startDate.Value <= c.DATEMODIFIED)
End If

问题是,q.toList()虽然我认为应该,但并未退回任何意见。 数据库中的所有评论都含有DATEMODIFIED的数值,即使我按时通过。 MinValue作为开端,查询仍然与任何实体相匹配。

我在“The If-Statement”前设定了一个突破点,并使用“视力监测”窗口来尝试和观察:

q.ToList()(0).DATEMODIFIED     Returns the expected date 
startDate.Value                Returns the expected date 
startDate.Value <= q.ToList()(0).DATEMODIFIED     Returns True...

但是,一旦它击中了q = q.Where(predicate)部分,ToList(ToList)就不再回到任何条目。 我.。

最佳回答

<><>UPDATE: 我认为,通过向实体提供LINQ,所有WHERE的表述都翻译成了KL,而不是在法典中进行后处理,因此,以下的伪造建议必然会奏效。

因此,首先,我对你的数据库进行了同样的编造说明,并证实贵实体框架提供人所生成的数据是否实际上正在归还你所期望的数据。 @Craig Stuntz 在上述正确轨道上肯定会帮助你这样做。 一旦有了参数,我就尝试从你的代码(使用<编码>System.Data.OracleClient)中直接执行。 重心注入你从<代码>获得的相同参数值。 标 标 标 或者,你可以坚持休庭的参数,从你选择的Oracle客户的口号上调。

如果你不从Kall那里获得结果,那么,我们就能够打赢。 艺术品供应者正在以不正确的方式建造 que。

you可忽略下文所述内容,因为它适用于向目标射击,但不适用于LINQ-to-Entities

诊断:

首先,在你的观察窗口中尝试:

q.Where(Function(c) startDate.Value <= c.DATEMODIFIED).Count()

我假定,这将恢复零,但应当消除许多其他变量,以确保你确实不会取得任何结果。

其次,我试图用两个问题来界定贵国的LINQ询问,而不是分别对(或)地点进行对比,例如:

Dim q As ObjectQuery(Of COMMENT)
If startDate.HasValue Then
    q = (From c In model.COMMENT Where startDate.Value <= c.DATEMODIFIED Select c)
Else
    q = (From c In model.COMMENT Select c)
End If

如果做这项工作,那么,在贵国现有的准则准则准则(准则Q)中加上哪一个条款——或许是贵国的房舍管理处的实体框架提供人的一个建议——就有些错了?

如果仍然不工作,那么,第一级(d)项的下一个步骤是核实在条款被点名的范围之内的代码,并检查这些数值是否通过。 我一定要说明如何像在C#中那样在VB建立内部断裂点,但你(通常)可以很容易地把你的lam子重新变成单独的功能,并在那里确定断裂点。 与此类似:

Sub Main()
    Dim testDate As Date = New Date(2005, 1, 1)
    Dim x = New List(Of Date?)
    x.Add(New Date(2009, 1, 1))
    x.Add(New Date(2008, 1, 1))
    x.Add(New Date(2007, 1, 1))
    x.Add(New Date(2006, 1, 1))
    x.Add(New Date(2005, 1, 1))
    x.Add(New Date(2004, 1, 1))
    x.Add(New Date(2003, 1, 1))
    x.Add(New Date(2002, 1, 1))
    x.Add(New Date(2001, 1, 1))
    Dim y = From n In x Select n
    y = y.Where(Function(val) test(val, testDate))
    Dim z = y.ToArray()
End Sub

Function test(ByVal date1 As Date, ByVal date2 As Date) As Boolean
    test = date1 >= date2
End Function

检查贵方的比较功能中的数值——这些数值是否有效? 比较是否回去了你期望的?

问题回答

暂无回答




相关问题
热门标签