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();编译仍然没问题,但是执行时总是服务器一段时间内没有正确响应,求各位大神指点
是不是就是说它不是作为参数传递过去的,然后调用的时候又出来找值?个人猜想,不懂,同问!
再仔细看看 ,你少试几个参数嘛,对比看看。
不应该有这样的问题呀,而且你用了ToList,这个和延迟查询也没任何关系。
建议采用LinqPad或者是SqlProfiler监控下最终是sql语句是否有差异。
不会出现这样的问题。
1、你可以通过profile跟踪SQL性能看
2、把你修改后的query转换为sql字符串,看小SQL语句是什么样的,再直接到数据库里执行,看又是怎么样的效率。
@yangyang12138: query.ToString()
首先根据 你的lambda 表达式可以看出你这个SQL语句构造很复杂 映射关系也很复杂 如果使用 linq 自动生成SQL语句 是很难得到你预期的sql 生成计划 对于业务复杂的多表查询本人愚见建议不要使用内置生成sql EF支持原生SQL语句 对于这样的业务自己定制的SQL 语句的性能肯定比LINQ自动生成的好 第二处我没有细看很可能写法不同导致了了性能低下SQL语句 这个没有必要细致研究 如果你有兴趣建议去看EF 官方公布的源码 查看他们的生成计划 避免这个隐性 坑