我想首先将一个应用程序转换为Entity FrameWork代码。我现在的代码是
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)'方法
请提前帮助,谢谢
当你这样做:
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
然后进行比较之外,你没有任何其他选项
为什么您的日期列是字符串?它不应该是DateTime
?
无论如何,如果您尝试在针对实体存储库的.Where语句中使用.NET函数执行转换,您将收到该错误。
您最好的选择是将该列从字符串更改为DateTime并从那里继续。如果你这样做,.Where
声明将是:
DateTime dtFrom = Convert.ToDateTime(sFrom );
var something = TransRepository.Entities.Where(x => x.Date >= dtFrom) ;
/我有一个类似的问题,我得到一个搜索字符串,并查询日期时间列...见第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;
从linq语句中取出转换部分并将其保存在变量中,如下所示:
var xyz = Convert.ToDateTime("12/31/2018");
并在linq语句中使用此变量。