我有一个可以为空的DateTime模型。我尝试使用IQueryable
对象并查找DateTime与字符串匹配的所有条目(如果已设置):
query.Where(s => s.MyDate.HasValue && s.MyDate.Value.ToString("{ 0:dd.MM.yyyy}").Contains(keyword));
然而,这不起作用,因为抛出异常:LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.
在我做了一些研究之后,问题似乎是我的条件无法转换为SQL。
我该如何解决这个问题?
向用户显示的示例数据:
10.03.2017
01.08.2017
可能的搜索字词:
答案 0 :(得分:1)
由于您不关心日期格式(假设用户知道他们要查询的内容),只需使用SQL Server默认转换:
query.Where(s => s.MyDate.HasValue && s.MyDate.Value.ToString().Contains(keyword));
答案 1 :(得分:0)
如果您正在使用实体框架:让我们假设s是DemoClass类型:
public partial class DemoClass
{
public Nullable<DateTime> MyDate;
...
}
将是您实体的DemoClass.cs。只需在一个额外的文件中添加一个额外的部分类(这是最佳方式,否则EF可以覆盖您的编辑,如果您正在使用设计师,例如。)
DemoClass_Additional.cs
public partial class DemoClass
{
[NotMapped]
public string MyDateString {
get
{
if(this.MyDate.HasValue)
{
return this.MyDate.Value.ToString("{ 0:dd.MM.yyyy}");
}
else
{
return "";
}
}
}
[NotMapped]将从数据库映射中排除该属性,最后您的查询将是
query.Where(s => s.MyDate.HasValue && s.MyDateString.Contains(keyword));