EntityFramework中LINQ To SQL的lumbda表达式的错误应用
2016-07-08 07:50
399 查看
前面写了一篇文章说使用lumbda表达式写好查询条件,然后在linq中使用
当时这样用的最大的好处就是,
果断的加了10W条数据,网站不负重望成了屎状,如果sqlserver不在本机的话,计算带宽更是扯了个DAN了。
而如果把
用EF提供的方法进行日期的判断就不会报错
恩,又报错了,说
这样可以了,说实话,我已经被里面的泛型弄晕了。
Expression的命名空间:
以上仅为个人看法,如果对你有帮助,那就谢天谢地了,如果您觉得很烂,就使劲在下面吐槽吧。
Func<DB.Task, bool> query = (m) => m.AssignDate.HasValue && q.startDate.Date == m.AssignDate.Value.Date; var list = bt.Task.Where(query).ToList();
当时这样用的最大的好处就是,
m.AssignDate.Value.Date可以使用而不报错。而最大的问题也就出现在这里。用SQL Server Profiler抓了一下请求的sql语句,大吃一惊,请求的数据等价于
select * from Task --has no Where /(ㄒoㄒ)/~~
果断的加了10W条数据,网站不负重望成了屎状,如果sqlserver不在本机的话,计算带宽更是扯了个DAN了。
而如果把
query的内容直接放到
Where里面,就会报错,原因就是Date不能用。
var list = bt.Task.Where((m) => m.AssignDate.HasValue && System.Data.Entity.DbFunctions.DiffDays(q.startDate, m.AssignDate) >= 0).ToList();
用EF提供的方法进行日期的判断就不会报错
Func<DB.Task, bool> query = (m) => m.AssignDate.HasValue && System.Data.Entity.DbFunctions.DiffDays(q.startDate, m.AssignDate) >= 0;
恩,又报错了,说
DbFunctions不能在linq外使用。
Expression<Func<DB.Task, bool>> query = (m) => m.AssignDate.HasValue && System.Data.Entity.DbFunctions.DiffDays(q.startDate, m.AssignDate) >= 0;
这样可以了,说实话,我已经被里面的泛型弄晕了。
Expression的命名空间:
using System.Linq.Expressions;
以上仅为个人看法,如果对你有帮助,那就谢天谢地了,如果您觉得很烂,就使劲在下面吐槽吧。
相关文章推荐
- 在EF中使用MySQL的方法及常见问题
- ASP.NET Mvc开发之EF延迟加载
- EntityFramework
- 在EF中使用MySQL的方法及常见问题
- Linux中如何杀掉僵尸进程
- Entity Framework数据库初始化四种策略
- 使用EF框架的增删改查和分页的公共类
- 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
- EF(EntityFramework) 的 CodeFirst 使用指南一(创建)
- EF(EntityFramework) 的 CodeFirst 使用指南二(基本使用)
- entity framework的配置步骤
- (无法推断有效的主键。已排除该表/视图)Entity Framework 无法对没有主键的视图映射实体的解决办法
- MVC中“The model backing the '***Context' context has changed since the database was created. ”的问题处理
- Linq To Entity 的增删改查(转)
- 如何在网站开发中使用LINQ操作数据库
- 关于EF学习,数据增删改查的讲解
- Silverlight访问数据库之Linq to SQL篇
- Entity Framework 全面教程详解(转)
- vs2012通过EF连接mysql数据库全程
- EF code-first 数据迁移