.NET中如何有效解决lambda表达式合并引发的性能问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1588个文字,预计阅读时间需要7分钟。
目录+解决方案:+完美解决+事件的起因是一个小员工询问了我一个问题+海哥,来看看这段代码怎么不行的+FuncReport, bool nameFilter=x=> x.Name==test; DbContext.Report.Where(x=> x.State==1 && nameFilter(x));
目录
- 解决方案:
- 完美解决
事情的起因是公司一个小伙子问了我个问题 “海哥,来帮我看下这段代码怎么不行”
Func<Report,bool> nameFilter = x=>x.Name == "test"; DbContext.Report.Where(x=>x.State==1 && nameFilter(x));
我一看,好家伙,这么骚的代码都能让你想出来,正常情况下用Linq To Object是可以这么操作的,但是EF的IQueryable查询是不能这么操作的。
Linq To Object是直接执行表达式,他就是个委托方法,里面嵌套多少层委托和方法都是能直接执行的IQueryable并不会执行表达式和方法,是把表达式转换为对应的Sql语句来执行,解析到nameFilter的时候他就懵逼了,这是啥玩意儿啊,sql里面没有这种东西啊,他就转换不了了。
小伙子知道后明细很失望,那不能啊,也不是我想显摆我的技术,就是想让小伙子能继续他的骚操作,给他来点海克斯科技与狠活。
本文共计1588个文字,预计阅读时间需要7分钟。
目录+解决方案:+完美解决+事件的起因是一个小员工询问了我一个问题+海哥,来看看这段代码怎么不行的+FuncReport, bool nameFilter=x=> x.Name==test; DbContext.Report.Where(x=> x.State==1 && nameFilter(x));
目录
- 解决方案:
- 完美解决
事情的起因是公司一个小伙子问了我个问题 “海哥,来帮我看下这段代码怎么不行”
Func<Report,bool> nameFilter = x=>x.Name == "test"; DbContext.Report.Where(x=>x.State==1 && nameFilter(x));
我一看,好家伙,这么骚的代码都能让你想出来,正常情况下用Linq To Object是可以这么操作的,但是EF的IQueryable查询是不能这么操作的。
Linq To Object是直接执行表达式,他就是个委托方法,里面嵌套多少层委托和方法都是能直接执行的IQueryable并不会执行表达式和方法,是把表达式转换为对应的Sql语句来执行,解析到nameFilter的时候他就懵逼了,这是啥玩意儿啊,sql里面没有这种东西啊,他就转换不了了。
小伙子知道后明细很失望,那不能啊,也不是我想显摆我的技术,就是想让小伙子能继续他的骚操作,给他来点海克斯科技与狠活。

