LINQ to SQL与T-SQL中的ISDATE()等效并进行转换?

时间:2009-03-03 17:21:59

标签: c# sql linq-to-sql

有没有人知道LINQ to SQL查询语法中ISDATE()的等价物?我在SQL中有一个包含日期的varchar字段,我需要过滤掉非日期行。

希望有这样的事情:

var query = SomeDataContext;
    query = from p in query
    where p.ISDATE(field1) == true;
    select p;

另外,如何在Linq语法中为SQL转换一些内容?

CAST(SomeDate AS SMALLDATETIME)

4 个答案:

答案 0 :(得分:3)

这样做的诀窍是在数据库中创建一个用户函数,只调用ISDATE作为返回值

  CREATE FUNCTION My_ISDATE(@maybeDate varchar(max))
  returns bit
  as return ISDATE(@maybeDate);

然后将My_IsDate添加到数据库上下文中,并在查询中使用它:

var db = SomeDataContext;
var query = from p in db.MyTable
where db.My_ISDATE(p.field1)
select p;

答案 1 :(得分:2)

我不认为在使用LINQ to SQL时有一个映射到ISDATE的扩展方法。

如果您可以加载所有数据,然后在客户端空间中进行过滤,则在该字段上使用TryParse并与日期进行比较。

否则,我将创建一个存储过程,它将返回您想要的数据(以便您可以使用ISDATE),然后通过上下文执行该操作。

此外,您使用ISDATE的语法不正确。 ISDATE只是告诉您表达式是否是有效的日期格式。您的查询将如下所示:

var query = SomeDataContext;
    query = from p in query
    where ISDATE(field1) != 0 && CONVERT(datetime, field1) > some date
    select p;

语法无效,但它可以让您了解如何构成查询。

答案 2 :(得分:0)

答案 3 :(得分:0)

SO 的一个问题是,越来越多的问题答案线程包含过时的答案,主要是因为它们已经多年未触及。然而,当您查询“我应该如何在 Linq 中使用 IsDate”时,如果与搜索引擎(例如 Google)结合,该搜索引擎将链接作为 #1 返回(例如这篇文章),则需要有人添加一个答案(在底部带有0 票)的最新正确答案。

:: https://github.com/dotnet/efcore/issues/8488 >

现在已将其添加到 EF.Functions 中,因此您可以简单地执行以下操作:

Where(x=>  EF.Functions.IsDate(x.somefield))