实体框架加入大内存列表

时间:2016-03-08 00:15:00

标签: sql-server entity-framework

据我所知,在内存数据上加入基本上会加载整个数据集,例如

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?

0 个答案:

没有答案