.NET中如何有效解决lambda表达式合并引发的性能问题?

2026-03-30 11:240阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1588个文字,预计阅读时间需要7分钟。

.NET中如何有效解决lambda表达式合并引发的性能问题?

目录+解决方案:+完美解决+事件的起因是一个小员工询问了我一个问题+海哥,来看看这段代码怎么不行的+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分钟。

.NET中如何有效解决lambda表达式合并引发的性能问题?

目录+解决方案:+完美解决+事件的起因是一个小员工询问了我一个问题+海哥,来看看这段代码怎么不行的+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里面没有这种东西啊,他就转换不了了。

小伙子知道后明细很失望,那不能啊,也不是我想显摆我的技术,就是想让小伙子能继续他的骚操作,给他来点海克斯科技与狠活。

阅读全文