首页  »   .NET新技术

linq to entity日期时间查询出错

网友分享于:2015-11-20  浏览:0次
linq to entity日期时间查询报错

using (var mySysDB = new SysDB<SysLog>(SysDB<SysLog>.GetConn))
  {
                        DateTime? queryDate = new DateTime(2015, 8, 24);
                        var bb = mySysDB.SysLog.Where(p => EntityFunctions.DiffDays(p.Date,queryDate) == 0);
                        var ss = mySysDB.SysLog.Where(p => EntityFunctions.TruncateTime(p.Date) == queryDate);
                        var aa = from A in mySysDB.SysLog
                                 where EntityFunctions.TruncateTime(A.Date) == queryDate
                                 select A;
                        int   totalRows = bb.Count();
}


说明:Date是日期型字段,查询的时候前端会传一个日期值到后台进行查询某一天的数据,但是运行到int   totalRows = bb.Count();获取数据行数赋值的时候就报错:
"LINQ to Entities 不识别方法“System.Nullable`1[System.DateTime] TruncateTime(System.Nullable`1[System.DateTime])”,因此该方法无法转换为存储表达式。"
折腾了一天了,DiffDays,TruncateTime这几个函数都不行,在网上也找了很多资料和我的代码也一样
------解决思路----------------------
把第一句的  DateTime? queryDate = new DateTime(2015, 8, 24); 换成 DateTime queryDate = new DateTime(2015, 8, 24);  试试
------解决思路----------------------
错误信息很明显了,LINQ不识别可空类型
------解决思路----------------------
System.DateTime?不就是System.Nullable`1[System.DateTime]的简写形式吗,语法糖而已
------解决思路----------------------
 var aa = from A in mySysDB.SysLog
                                 where A.Date.hasValue &&  EntityFunctions.TruncateTime(A.Date.value) == queryDate.value
                                 select A;
------解决思路----------------------
EntityFunctions.TruncateTime(p.Date)
p.Data是可空类型,用TruncateTime函数无法转换
------解决思路----------------------
TruncateTime(A.Date)
这里还有A.Date呢

你确定改了之后,错误信息什么变化都没有,行号什么的都没变?
------解决思路----------------------
老兄,LIinq 不支持这种搞法的,

相关解决方案

最新解决方案