首页 新闻 会员 周边

EF Core 中的CountAsync 问题

0
[已解决问题] 解决于 2017-02-25 10:22

我想用 CountAsync 来查询数量,但是虽然得到数量了,为什么SQL Profile 中监控到进行了全表查询呢?


BUTTERAPPLE的主页 BUTTERAPPLE | 老鸟四级 | 园豆:3190
提问于:2017-02-22 13:58
< >
分享
最佳答案
1

建议先检查一下是不是查询条件的表达式引起的,参考 使用Entity Framework Core需要注意的一个全表查询问题

奖励园豆:5
dudu | 高人七级 |园豆:30943 | 2017-02-22 14:03

好的,我去看看。


BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 14:07

只在表达式 用了Contains


BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 14:14

@BUTTERAPPLE: 可以参考 Contains does not understand nullable types 中的解决方法

query = query.Where(e =>  e.CategoryType.HasValue && categoryTypes.Contains(e.CategoryType.Value));
dudu | 园豆:30943 (高人七级) | 2017-02-22 21:19

@dudu: 我记得好像试过了,我待会去试试看。


BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 21:21
其他回答(2)
1

毫无疑问你利用Count会进行全表扫描,如果需要进行分页 最好还是写SQL吧


Jeffcky | 园豆:2789 (老鸟四级) | 2017-02-22 14:01

好的,谢谢。


支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 14:02

@BUTTERAPPLE: 你具体是怎么查的??


支持(0) 反对(0) Jeffcky | 园豆:2789 (老鸟四级) | 2017-02-22 14:24

@Jeffcky: 从查询表达式中进行CountAsync 操作。查询表达式中用了Contains 方法


支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 14:28

@BUTTERAPPLE: 是不是用了contains的缘故,你先去掉试试


支持(0) 反对(0) Jeffcky | 园豆:2789 (老鸟四级) | 2017-02-22 14:30

@Jeffcky: 我去试一下看看。


支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 14:31

我的Contains 中包含了 Null 值,然后这个EF生成的SQL 直接全表查询了。


支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 15:06
1

当然是因为你的写法问题.和count本身没关系.

我用count就不会全表查询啊.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-02-22 14:20

请问您在使用 Contains 时是否有用过Contains 里面包含的是一个可空的变量呀?


支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-22 17:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册