linq查询将文本转换为日期以与另一个日期vb.net进行比较

时间:2018-03-29 20:28:44

标签: sql sql-server vb.net linq

我有一个数据库字段Field260,它将日期表示存储为文本。例如,3/29/2018的值将存储为字符串"03/29/2018"

 Dim Db = New DataClasses1DataContext

 Return From cf In Db.FileDatas
     Where cf.Field260 <= System.DateTime.Today

返回错误

System.Data.SqlClient.SqlException: 'Explicit conversion from data type text to datetime is not allowed.'

当我尝试解析日期时

Where DateTime.Parse(cf.Field260) <= System.DateTime.Today

我收到了

System.NotSupportedException: 'Method 'System.DateTime Parse(System.String)' has no supported translation to SQL.'

我很难过。

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题-曾经有一个用于字段的DatePicker的应用程序,以及我的数据库字段定义为DateTime的应用程序,但是用户绝对希望将所需的任何垃圾复制/粘贴到该字段中。问题是,我允许他们通过“日期”字段搜索记录。

作为一种解决方法,我对它们输入的垃圾进行一些基本验证,以尝试仅允许日期(IsDate函数捕获大多数错误,但仍允许它们输入年份,例如208而不是2018,因此我还要检查Year( DateValue(txtDate.Text))> 2000,它对我有用,因为它是应用程序接收的日期,因此,绝对不能早于今年。然后,将其作为varchar存储在数据库中。

搜索记录时,您有两个选择-抓住所有记录,然后在返回的列表上执行日期转换以减少结果,或者希望并祈祷您的有问题的LINQ WHERE子句将提供您想要的一切。

答案 1 :(得分:-1)

想出来,因为我是天才。

 Return From cf In Db.FileDatas
     Where cf.Field260.ToString() <= System.DateTime.Today.ToString("MM/dd/yyyy")

以某种方式比较字符串到字符串的作品,谁知道!