C# LINQ to实体无法识别方法';System.DateTime到DateTime(System.String)和#x27;方法

C# LINQ to实体无法识别方法';System.DateTime到DateTime(System.String)和#x27;方法,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我正在尝试将一个应用程序转换为EntityFrameWork codefirst。 我现在的代码是 string sFrom ="26/12/2013"; select * FROM Trans where CONVERT(datetime, Date, 105) >= CONVERT(datetime,'" + sFrom + "',105) 我试过了 DateTime dtFrom = Convert.ToDateTime(sFrom ); TransReposito

我正在尝试将一个应用程序转换为EntityFrameWork codefirst。 我现在的代码是

 string sFrom  ="26/12/2013";
 select * FROM Trans where  CONVERT(datetime, Date, 105) >=   CONVERT(datetime,'" + sFrom + "',105) 
我试过了

 DateTime dtFrom = Convert.ToDateTime(sFrom );
TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
但我犯了这样的错误

LINQ to实体无法识别方法“System.DateTime” ToDateTime(System.String)“”方法

请帮忙 当您这样做时,请提前感谢:

TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
LINQ to Entities无法将大多数.NET日期方法(包括您使用的转换)转换为SQL,因为没有等效的SQL。 您需要做的是执行以下操作:

 DateTime dtFrom = Convert.ToDateTime(sFrom );
  TransRepository
 .Entities.ToList()//forces execution
 .Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
但是等待,上面的查询将获取整个数据,并执行
。其中
,您肯定不希望这样做

简单的解决方法是, 就个人而言,我会将实体字段设置为
DateTime
,将db列设置为
DateTime


但是,由于db/Entity
Date
字段是字符串,因此除了将实体和db中的字段更改为
DateTime
然后进行比较之外,您没有其他选择,为什么日期列是字符串?它不应该是一个日期时间吗

无论如何,如果您试图在.Where语句中对实体存储库使用.NET函数执行转换,您将得到该错误

最好的选择是将该列从字符串更改为DateTime,然后从那里继续。如果这样做,
.Where
语句将是:

DateTime dtFrom = Convert.ToDateTime(sFrom );
var something = TransRepository.Entities.Where(x  => x.Date >= dtFrom) ;
/我有一个类似的问题,我得到一个搜索字符串和查询一个日期时间列。。。见第4行/


将convert部分从linq语句中取出并保存在变量中,如下所示:

var xyz = Convert.ToDateTime("12/31/2018");

并在linq语句中使用此变量。

不,不要这样做。它将把整个表内容带到内存中,并使用LINQ to对象在内存中执行过滤。在这种情况下,您将所有数据发送到客户端,这可能不是所需的行为,尤其是当表包含数百万条记录时。@ManishMishra您的答案是“未完成”吗?不要张贴它。但即使有了更新,我也不同意,我认为OP不应该听从你的建议。嘿,他应该遵循什么与否无关紧要,我试图解释,为什么会出现错误,以及如何看到它消失。你的解释是错误的。根本不生成SQL,也不向SQL Server发送任何内容。LINQ to实体根本无法生成正确的SQL。2.以您建议的方式消除错误会给OP带来大量其他问题,其中最大的问题是巨大的性能问题。3.还有其他解决这个问题的方法,你可以在这里阅读:我发现这是一个非常简单的解决方法,不需要经历很多麻烦。谢谢你的帮助。但不幸的是,我无法将列更改为DateTime为什么建议更改数据库是“最佳选择”?“非最佳”选项是什么?大多数开发人员都无法控制数据库中的数据类型,因此建议他将其更改为唯一提供的答案是不好的。(这篇文章似乎没有提供问题的答案。请编辑您的答案,或者只是将其作为问题的注释发布)。这是这里最简单的解决方案。你帮了我很多。谢谢你。
var xyz = Convert.ToDateTime("12/31/2018");