【发布时间】:2025-12-04 03:15:01
【问题描述】:
我有一个包含内容的数据库,设计得非常通用。其中一列是 MetaTag1,类型为 nvarchar(255),其中包含字符串格式的日期。我无法将其更改为 DateTime 类型。我首先使用 Entity Framework 代码通过 LINQ 查询表。
现在我必须做类似的事情:
var dateAsString = "12/04/2015";
var result = context.MetaTags.Where(mt => DateTime.Parse(dateAsString) > DateTime.Parse(mt.MetaTag1));
这不起作用,因为我得到了例外:
'LINQ to Entities does not recognize the method 'System.DateTime Parse(System.String)' method, and this method cannot be translated into a store expression.'
一种解决方案是首先使用 ToList() 在内存中具体化结果,然后在 LINQ 中对实体进行过滤。但这意味着必须先检索所有结果。
在 LINQ 中是否有另一种方法可以将字符串作为日期进行比较?
谢谢!
【问题讨论】:
-
我认为数据库中的字符串也以愚蠢的格式“12/04/2015”存储?
-
可以使用直接的字符串比较。看看这个:*.com/questions/7740693/…
-
@gregmac:我们可以就消费者必须使用的格式达成一致。
-
@L-Three 您正在使用 LINQ 查询实体框架。该错误甚至包含“LINQ to Entities”。您的问题与 LINQ to entity 相关。在我提供的链接中查看选择的答案,但也要查看投票最高的答案(这恰好不是选择的答案)。
-
如果您实际上可以使用ISO 8601 (
YYYY-MM-DD),那么它会按字典顺序进行排序,这意味着这种格式的日期字符串比较无需任何转换即可工作。这是计算中so popular 的部分原因。当然,如果您可以更改该格式,我不确定您为什么不能只使用本机 Date 类型..
标签: c# linq entity-framework