以下几种方式全报错,求解,谢谢!
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)”,因此该方法无法转换为存储表达式。
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();
不可能先ToList(),数据量太大,还有其它办法吗?
在执行实体查询的时候,在ToList里面是不能潜逃函数去执行的,这样的查询只有在ToList的时候LINQ才会执行,你可以使用循环遍历,然后逐条数据进行处理
ToList后再处理从性能上,显然是不可取的。不过可以用sql语句或在rf6中用存储过程解决。只是我上面用到的方法,好像是可以的。
ToList后再处理从性能上,显然是不可取的。不过可以用sql语句或在rf6中用存储过程解决。只是我上面用到的方法,好像是可以的。