有没有人知道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)
答案 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)
看起来你可以做到。链接:
http://msdn.microsoft.com/en-us/library/bb386973.aspx
这可能会有所帮助,但我没有看过它:
http://mtaulty.com/videos/nuggets/l2s/15_mt_l2s_callingsqlfunctions.wmv
完整列表:
http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/05/10/9322.aspx
答案 3 :(得分:0)
SO 的一个问题是,越来越多的问题答案线程包含过时的答案,主要是因为它们已经多年未触及。然而,当您查询“我应该如何在 Linq 中使用 IsDate”时,如果与搜索引擎(例如 Google)结合,该搜索引擎将链接作为 #1 返回(例如这篇文章),则需要有人添加一个答案(在底部带有0 票)的最新正确答案。
:: https://github.com/dotnet/efcore/issues/8488 >
现在已将其添加到 EF.Functions 中,因此您可以简单地执行以下操作:
Where(x=> EF.Functions.IsDate(x.somefield))