我想用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)'方法,并且此方法无法转换为商店表达式。
我在这里缺少什么?
答案 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的方法。