首页 新闻 会员 周边 捐助

EF Core 里 Inner join 在 Count 中无效的问题

0
悬赏园豆:20 [已解决问题] 解决于 2021-10-07 08:46

代码如下:

Sample1:
 return await _questionFeed.CountAsync(spec.SatisfiedBy());
Sample2:
return await _questionFeed
                .Where(spec.SatisfiedBy())
                .Include(p => p.SenderUser)
                .Include(p => p.ReciverUser)
                .CountAsync();

两个代码生成的数据库语句一样:

exec sp_executesql N'SELECT COUNT(*)
FROM [T_Feed] AS [q]
WHERE ([q].[IsActive] = 1) AND ([q].[ReciverID] = @__UID_0)',N'@__UID_0 int',@__UID_0=2

为什么没有加入Inner Join?

如果先ToList,然后再获取到Count属性是可以的

BUTTERAPPLE的主页 BUTTERAPPLE | 老鸟四级 | 园豆:3190
提问于:2018-03-16 17:12
< >
分享
最佳答案
0

更新到2.1试试看。

为什么我感觉这就是BUG。。。。

收获园豆:20
czd890 | 专家六级 |园豆:14488 | 2018-03-16 18:13
其他回答(2)
0

yi因为没有影响..

吴瑞祥 | 园豆:29449 (高人七级) | 2018-03-16 17:35

那我是不是只能先tolist 然后再取count

支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2018-03-16 17:51

@BUTTERAPPLE: 你为什么觉得1和2生成的sql要不一样...

直接count为什么不行.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2018-03-16 18:00

@吴瑞祥: 如果直接CountAsync 可以的话,可以省些代码。[捂脸]

支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2018-03-16 18:08

@BUTTERAPPLE: 直接count当然可以..你又没有加条件.直接一个表连接.

人家ef觉得这种count还要加表连接的行为很傻.所以帮你优化掉了.

想要让他带上.就用连接的表加判断.再count.他就会加上了.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2018-03-16 18:19
0

请问在EF Core里怎么看生成的Sql语句啊?

陆仁甲乙丙丁 | 园豆:203 (菜鸟二级) | 2019-02-20 10:20

在SQL Server中查看

支持(0) 反对(0) BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2019-02-20 11:03

@BUTTERAPPLE: 尴尬了,用的数据库是PostgreSQL

支持(0) 反对(0) 陆仁甲乙丙丁 | 园豆:203 (菜鸟二级) | 2019-02-20 16:32

@陆仁甲乙丙丁: PostgreSQL 这个我没用过哦,但是PostgreSQL里面应该有就是类似于 SQL Profile 的东西吧。你可以去找找看。

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