首页 新闻 搜索 专区 学院

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

0
悬赏园豆:20 [待解决问题]

代码如下:

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 | 老鸟四级 | 园豆:2950
提问于:2018-03-16 17:12
< >
分享
所有回答(3)
0

yi因为没有影响..

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

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

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

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

直接count为什么不行.

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

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

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

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

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

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

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

更新到2.1试试看。

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

czd890 | 园豆:9611 (大侠五级) | 2018-03-16 18:13
0

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

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

在SQL Server中查看

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

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

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

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

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