首页 新闻 会员 周边 捐助

EntityFramework4.5里日期计算报错。

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-07-23 18:36

以下几种方式全报错,求解,谢谢!

context 是 dbcontext

1、context.Products.Where(w => System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(w.Created, DateTime.Now) < 0).ToList();

 

2、context.Products.Where(w => System.Data.Objects.EntityFunctions.DiffMonths( p.Created, now) < 0).ToList();

 

3、context.Products.Where(w => SqlFunctions.DateDiff("day", w.LastModifyDate, now) >= 0)).ToList();

 

错误提示:LINQ to Entities 不识别方法“Int32 DateDiffDay(System.DateTime, System.DateTime)”,因此该方法无法转换为存储表达式。

小徐的博客的主页 小徐的博客 | 初学一级 | 园豆:15
提问于:2013-04-12 22:02
< >
分享
所有回答(3)
1

System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(w.Created, DateTime.Now),System.Data.Objects.EntityFunctions.DiffMonths( p.Created, now),

 SqlFunctions.DateDiff("day", w.LastModifyDate, now)这些先在外面转换为一个变量再进行比较

可以这样 var dateDiffDay=System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(w.Created, DateTime.Now);

context.Products.Where(w => dateDiffDay< 0).ToList();

手撕.net | 园豆:202 (菜鸟二级) | 2013-04-12 22:52

不可能先ToList(),数据量太大,还有其它办法吗?

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-04-12 23:05
0

在执行实体查询的时候,在ToList里面是不能潜逃函数去执行的,这样的查询只有在ToList的时候LINQ才会执行,你可以使用循环遍历,然后逐条数据进行处理

不负春光,努力生长 | 园豆:1382 (小虾三级) | 2013-04-14 14:57

ToList后再处理从性能上,显然是不可取的。不过可以用sql语句或在rf6中用存储过程解决。只是我上面用到的方法,好像是可以的。

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2013-04-14 17:42
0

ToList后再处理从性能上,显然是不可取的。不过可以用sql语句或在rf6中用存储过程解决。只是我上面用到的方法,好像是可以的。

小徐的博客 | 园豆:15 (初学一级) | 2013-07-22 12:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册