【发布时间】:2010-09-10 03:37:33
【问题描述】:
我正在通过以下方式在我的 ASP.NET MVC 项目中构建动态查询:
Dim queryString As String = "SELECT VALUE userInfos FROM MyDBEntities.UserInformations AS userInfos"
If strWhere <> "" Then
queryString = queryString & " WHERE " & strWhere
End If
' Call the constructor with the specified query and the ObjectContext.
Dim SearchUsersQuery As New System.Data.Objects.ObjectQuery(Of UserInformation)(queryString, MyDB)
Dim lstOfUsers As List(Of UserInformation) = SearchUsersQuery.ToList
基本上 strWhere 是一个字符串,我根据用户选择搜索的内容构建动态过滤器。
在我需要向 date 子句添加日期比较之前,这很有效。
我正在尝试以下方法:
strWhere = " userInfos.BirthDate <= " & StartDateForQuery.ToShortDateString
最终会变成:
"SELECT VALUE userInfos FROM MyDBEntities.UserInformations AS userInfos Where userInfos.BirthDate <= 10/09/1992"
但是,当我尝试使用 ToList 执行查询时,只要日期位于 where 字符串中,就会出现以下错误:
参数类型“Edm.DateTime”和“Edm.Int32”对于此操作不兼容。在 WHERE 谓词附近,第 1 行,第 103 列。
对我的问题有什么想法吗?
提前致谢
【问题讨论】:
-
两个问题:什么是数据库供应商?数据库中 BirthDate 的格式是什么?
-
这是一个 Microsoft SQL Server 数据库。 BirthDate 的类型为 DateTime
-
你是如何执行这个查询的?
-
将 SearchUsersQuery 作为新 System.Data.Objects.ObjectQuery(Of UserInformation)(queryString, MyDB) Dim lstOfUsers 作为 List(Of UserInformation) = SearchUsersQuery.ToList
标签: sql-server asp.net-mvc vb.net dynamic-sql