EFCoreWhere(...set.Contains(...))关心Set是List还是HashSet吗?

问题描述 投票:0回答:1

正是标题中的问题。

假设我使用 EFCore 查询 SQL DB,我写道:

myTableDbSet.Where(entity => filterSet.Contains(entity.Id))

那么

filterSet
的具体类型是什么?

一般来说,C# 很重要...

aLargeHashSet.Contains(val)
aLargeList.Contains(val)
快得多。但这对EF有什么影响吗?

我想不会?我猜测它将迭代集合以将一串值写入IN()

子句中。

但这只是猜测。有没有人有知情意见?

performance entity-framework-core hashset
1个回答
0
投票

那么,filterSet 的具体类型是什么,有什么区别(例如对性能)吗?

不,它不会(至少在重要方面),因为 EF Core 将 LINQ 查询转换为 SQL 查询。请参阅

查询如何工作

查询的这些部分被翻译为特定于数据库的查询语言(例如,关系数据库的 SQL)

如果 EF Core 不翻译这部分,那么从性能角度来看,修复该问题比选择更合适的集合要有利得多。

© www.soinside.com 2019 - 2024. All rights reserved.