获取Lambda Expression中的字符串范围

时间:2014-01-03 10:24:17

标签: c# linq entity-framework linq-to-entities

我想用Lambda表达式进行查询,以获取结果集在某个范围之间的值。数据库中的值类型字符串,用于存储日期值。 在SQL中,between运算符使用此值但不使用Lambda表达式。我已使用此问题here作为指导。

代码:

IQueryable<BankmedStatments> q = db.BankmedStatments.Where(u => DateTime.Parse(u.fServiceDate) >= DateTime.Parse(newStartDate));

错误:

  

LINQ to Entities无法识别方法'System.DateTime Parse(System.String)'方法,并且此方法无法转换为商店表达式。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您可以使用SqlFunctions.DateDiff(String, String, String)方法检查服务器端的日期差异:

IQueryable<BankmedStatments> q = 
  db.BankmedStatments.Where(u => SqlFunctions.DateDiff("ms", u.fServiceDate, newStartDate) > 0);

在这种情况下,Entity Framework将能够生成SQL查询,如下所示:

 SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[fServiceDate] AS [fServiceDate]
 FROM [dbo].[BankmedStatments] AS [Extent1]
 WHERE (DATEDIFF(ms, [Extent1].[fServiceDate], @date)) > 0

当然,请考虑使用适当的数据类型在数据库中存储日期。

答案 1 :(得分:1)

这里的问题是,当您获得IQueryable时,代码实际上是针对数据库执行的,并且是延迟的。所以问题是SQL没有名为DataTime.Parse的方法。