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

时间:2013-12-27 08:07:10

标签: 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 );
TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 

但是我收到了这样的错误

  

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

请帮忙 提前致谢

4 个答案:

答案 0 :(得分:8)

当你这样做时:

TransRepository.Entities.Where(x  =>Convert.ToDateTime(x.Date) >= dtFrom) 

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

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

但等待以上查询将获取整个数据,并在其上执行.Where,绝对不需要,

简单的灵魂将是this, 我个人认为,我的实体字段为DateTime,db列为DateTime

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

答案 1 :(得分:3)

为什么您的日期列是字符串?不应该是DateTime吗?

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

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

DateTime dtFrom = Convert.ToDateTime(sFrom );
var something = TransRepository.Entities.Where(x  => x.Date >= dtFrom) ;

答案 2 :(得分:0)

/ 我遇到了类似的问题,我正在获取搜索字符串并查询日期时间列...请参见第4行 /

1)case "Admission_Date":
2)if (!String.IsNullOrEmpty(SearchValue))
3)   {
4)   DateTime dtFrom = 
Convert.ToDateTime(SearchValue); 
wards = from s in db.CORE_DATA_tbl
    where s.Admit_Date == dtFrom
    orderby s.ActionType, s.AdmissionLocation
    select s;
    }
    break;

答案 3 :(得分:0)

从linq语句中取出转换部分,并将其保留在变量中,如下所示:

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

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