我正在尝试将一个应用程序转换为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)'方法
请帮忙 提前致谢
答案 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语句中使用此变量。