据我所知,在内存数据上加入基本上会加载整个数据集,例如
var ids = new int[] { 1, 2, 3}
var data = context.Set<Product>().Join(ids, x => x.Id, id => id, (x, id) => x)
这会导致整个&#39;产品&#39;要加载到内存中的表。在我目前的情况下,这不是一个选项,因为它包含数百万条记录。
我见过的常见解决方案是使用Contains()
,例如
var ids = new int[] { 1, 2, 3}
var data = context.Set<Product>().Where(x => ids.Contains(x.Id));
生成SQL IN
子句,如WHERE Id IN (1, 2, 3)
但是如果内存列表非常大呢?如果你有一个包含1000个值的IN子句,这是否会产生任何问题?或者数以万计?
是否有一些替代查询可以创建不同的(更好的?)SQL?