代码如下:
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属性是可以的
更新到2.1试试看。
为什么我感觉这就是BUG。。。。
yi因为没有影响..
那我是不是只能先tolist 然后再取count
@BUTTERAPPLE: 你为什么觉得1和2生成的sql要不一样...
直接count为什么不行.
@吴瑞祥: 如果直接CountAsync 可以的话,可以省些代码。[捂脸]
@BUTTERAPPLE: 直接count当然可以..你又没有加条件.直接一个表连接.
人家ef觉得这种count还要加表连接的行为很傻.所以帮你优化掉了.
想要让他带上.就用连接的表加判断.再count.他就会加上了.
请问在EF Core里怎么看生成的Sql语句啊?
在SQL Server中查看
@BUTTERAPPLE: 尴尬了,用的数据库是PostgreSQL
@陆仁甲乙丙丁: PostgreSQL 这个我没用过哦,但是PostgreSQL里面应该有就是类似于 SQL Profile 的东西吧。你可以去找找看。