首页 新闻 会员 周边 捐助

ef 中的 Any 的用法

0
[已解决问题] 解决于 2019-05-06 12:17

// 方式1:
if (dbContext.Book.Where(x => x.Id == id).Any())
{
}

// 方式2:
if (dbContext.Book.Any(x => x.Id == id))
{
}

看起来“方式2”更简洁。但,这两种方式,生成的SQL是否相同,哪个执行效率更高?

大豆男生的主页 大豆男生 | 小虾三级 | 园豆:608
提问于:2019-05-03 17:18
< >
分享
最佳答案
0

没区别,同一个操作的2种写法而已

奖励园豆:5
dudu | 高人七级 |园豆:30948 | 2019-05-03 19:13
其他回答(3)
0

生成的语句如果不一样.那都能算bug了.
没什么区别.

吴瑞祥 | 园豆:29449 (高人七级) | 2019-05-03 18:07
0

建议打印出来生成的sql语句,对比看看。

又见阿郎 | 园豆:163 (初学一级) | 2019-05-04 15:50
0

还是有区别的,在复杂场景下面生成的SQL会不一致。比如下面关联关系,使用Where和使用Any查询结果会不一样,Where会生成连接语句,Any是Exists,如果要根据子条件进行查询,应该使用any
var ordersWithProducts = context.Orders
.Where(o => o.Products.Any(p => p.Price > 100))
.ToList();

var ordersWithProducts = context.Orders
.Where(o => o.Products.where(p => p.Price > 100))
.ToList();

SBANASBKY | 园豆:402 (菜鸟二级) | 2024-08-21 16:05

至于EF Core为什么这么生成,生成逻辑是为什么,需要其他大神来解答了。

支持(0) 反对(0) SBANASBKY | 园豆:402 (菜鸟二级) | 2024-08-21 16:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册