C# 获取Lambda表达式中的字符串范围
我想使用Lambda表达式进行查询,以获取结果集在特定范围内的值。数据库中的值类型字符串,用于存储日期值。 在SQL中,between运算符使用此值,但不使用Lambda表达式。我用这个问题作为指导 代码:C# 获取Lambda表达式中的字符串范围,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我想使用Lambda表达式进行查询,以获取结果集在特定范围内的值。数据库中的值类型字符串,用于存储日期值。 在SQL中,between运算符使用此值,但不使用Lambda表达式。我用这个问题作为指导 代码: IQueryable q=db.bankmedstations.Where(u=>DateTime.Parse(u.fServiceDate)>=DateTime.Parse(newStartDate)); 错误: LINQ to Entities无法识别方法“System.DateTim
IQueryable q=db.bankmedstations.Where(u=>DateTime.Parse(u.fServiceDate)>=DateTime.Parse(newStartDate));
错误:
LINQ to Entities无法识别方法“System.DateTime Parse(System.String)”方法,并且无法将此方法转换为存储表达式
这里我遗漏了什么?这里的问题是,当您获得IQueryable时,代码实际上是针对数据库执行的,并且被延迟。所以问题是SQL没有一个名为DataTime.Parse的方法。您可以使用该方法检查服务器端的日期差异:
IQueryable<BankmedStatments> q =
db.BankmedStatments.Where(u => SqlFunctions.DateDiff("ms", u.fServiceDate, newStartDate) > 0);
当然,考虑使用适当的数据类型来存储数据库中的日期。< /P>我将如何工作?我认为ATLULL @ VLADMIR是一个可以考虑的选项。问题是,您的日期以字符串的形式公开,并且您正在对其进行DateTime.Parse。如果将属性公开为日期,则可以消除DateTime.Parse,只需使用直接日期比较即可。谢谢,这样做非常省力
IQueryable<BankmedStatments> q =
db.BankmedStatments.Where(u => SqlFunctions.DateDiff("ms", u.fServiceDate, newStartDate) > 0);
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[fServiceDate] AS [fServiceDate]
FROM [dbo].[BankmedStatments] AS [Extent1]
WHERE (DATEDIFF(ms, [Extent1].[fServiceDate], @date)) > 0