我有一个实体Person,其中包含与其关联的位置列表。我需要查询个人表,并从位置列表(标准)中获取所有至少有一个位置的人。下面的作品,但效率非常低:检查列表是否包含来自EntityFramework中其他列表的项目
var searchIds = new List<int>{1,2,3,4,5};
var result = persons.Where(p => p.Locations.Any(l => searchIds.Any(id => l.Id == id)));
这对小名单(比如5-10 searchIds和5-10位置的人能正常工作的问题是,有些人可能有100个地点和搜索即可。当我试图执行上面的EF时,实际上产生了2000多条SQL语句,并且因为嵌套过于深入而失败了,虽然嵌套本身已经是一个问题,即使它可以工作, d仍然不会发生在2000+ SQL语句中
注意:真正的代码还包括多层次和父子关系,但我确实设法只用id来代替这个相当平坦的结构,而不是的福ll objects
在EF中完成此操作的最佳方法是什么?
获得2000+ sql时,您传递了多少个ID? – ivowiblo