正是标题中的问题。
假设我使用 EFCore 查询 SQL DB,我写道:
myTableDbSet.Where(entity => filterSet.Contains(entity.Id))
那么
filterSet
的具体类型是什么?
一般来说,C# 会很重要...
aLargeHashSet.Contains(val)
比aLargeList.Contains(val)
快得多。但这对EF有什么影响吗?
我想不会?我猜测它将迭代集合以将一串值写入IN()
子句中。但这只是猜测。有没有人有知情意见?
那么,filterSet 的具体类型是什么,有什么区别(例如对性能)吗?
不,它不会(至少在重要方面),因为 EF Core 将 LINQ 查询转换为 SQL 查询。请参阅查询如何工作:
查询的这些部分被翻译为特定于数据库的查询语言(例如,关系数据库的 SQL)如果 EF Core 不翻译这部分,那么从性能角度来看,修复该问题比选择更合适的集合要有利得多。