首页 新闻 会员 周边 捐助

lambda表达式多条件查询是的变量问题

0
悬赏园豆:50 [已关闭问题] 关闭于 2017-01-17 10:58

db.Set<e_ammeterhourdatas>().Where(g => g.NYear == 2014 && g.NMonth == 9 && g.NDay == 6&&g.d_node.g_group.MainBuildID == “11256987”&&g.d_node.IsDel == 0 && g.e_electrotype.IsDel == 0).ToList();以上条件查询完全没有问题,执行也很快可以看到结果,但是如果把几个值改成变量,int year=2014,month=9,day=6;string id="11256987";db.Set<e_ammeterhourdatas>().Where(g => g.NYear == year&& g.NMonth == month && g.NDay == day&&g.d_node.g_group.MainBuildID == id&&g.d_node.IsDel == 0 && g.e_electrotype.IsDel == 0).ToList();编译仍然没问题,但是执行时总是服务器一段时间内没有正确响应,求各位大神指点

杨杨09265的主页 杨杨09265 | 初学一级 | 园豆:152
提问于:2014-09-26 11:53
< >
分享
所有回答(5)
-2

是不是就是说它不是作为参数传递过去的,然后调用的时候又出来找值?个人猜想,不懂,同问!

湖底的鱼 | 园豆:10 (初学一级) | 2014-09-26 13:09
-2

再仔细看看 ,你少试几个参数嘛,对比看看。

隔壁老王来了 | 园豆:99 (初学一级) | 2014-09-26 13:26
-3

不应该有这样的问题呀,而且你用了ToList,这个和延迟查询也没任何关系。

建议采用LinqPad或者是SqlProfiler监控下最终是sql语句是否有差异。

幻天芒 | 园豆:37205 (高人七级) | 2014-09-26 13:26
-2

不会出现这样的问题。

1、你可以通过profile跟踪SQL性能看

2、把你修改后的query转换为sql字符串,看小SQL语句是什么样的,再直接到数据库里执行,看又是怎么样的效率。

519740105 | 园豆:5810 (大侠五级) | 2014-09-26 13:28

@yangyang12138: query.ToString()

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-09-26 14:19
-2

首先根据 你的lambda 表达式可以看出你这个SQL语句构造很复杂 映射关系也很复杂 如果使用 linq 自动生成SQL语句 是很难得到你预期的sql 生成计划  对于业务复杂的多表查询本人愚见建议不要使用内置生成sql   EF支持原生SQL语句  对于这样的业务自己定制的SQL 语句的性能肯定比LINQ自动生成的好 第二处我没有细看很可能写法不同导致了了性能低下SQL语句 这个没有必要细致研究 如果你有兴趣建议去看EF 官方公布的源码 查看他们的生成计划  避免这个隐性 坑

苦逼面条 | 园豆:289 (菜鸟二级) | 2014-09-29 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册