LINQ to Entities无法识别方法'System.DateTime ToDateTime(System.String)'方法

pra*_*rab 6 c# linq-to-entities entity-framework

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

 string sFrom  ="26/12/2013";
 select * FROM Trans where  CONVERT(datetime, Date, 105) >=   CONVERT(datetime,'" + sFrom + "',105) 
Run Code Online (Sandbox Code Playgroud)

我试过了

 DateTime dtFrom = Convert.ToDateTime(sFrom );
TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
Run Code Online (Sandbox Code Playgroud)

但是我得到了这样的错误

LINQ to Entities无法识别方法'System.DateTime ToDateTime(System.String)'方法

请提前帮助,谢谢

Man*_*hra 9

当你这样做:

TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
Run Code Online (Sandbox Code Playgroud)

LINQ to Entities无法将大多数.NET Date方法(包括您使用的转换)转换为SQL,因为没有等效的SQL.你需要做的是在下面做:

 DateTime dtFrom = Convert.ToDateTime(sFrom );
  TransRepository
 .Entities.ToList()//forces execution
 .Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 
Run Code Online (Sandbox Code Playgroud)

但等待上面的查询将获取整个数据,并执行.Where它,绝对你不希望这样,

简单的灵魂就是这个,就个人而言,我会将我的实体字段DateTime和db列作为DateTime

但是,因为你的db/Entity Date字段是字符串,除了将实体和db中的字段更改为DateTime然后进行比较之外,你没有任何其他选项

  • 不,不要那样做.它将整个表内容带入内存,并使用LINQ to Objects在内存中执行过滤. (5认同)
  • 1.你的解释是错误的。根本不会生成 SQL,也不会向 SQL Server 发送任何内容。LINQ to Entities 根本无法生成正确的 SQL。2. 以您建议的方式消除错误会给 OP 带来大量其他问题,其中最重要的就是巨大的性能问题。3. 还有其他解决这个问题的方法,你可以在这里阅读:http://stackoverflow.com/questions/7740693/big-issue-in-converting-string-to-datetime-using-linq-to -实体 (2认同)