【发布时间】:2017-06-30 06:58:40
【问题描述】:
最初我有这样一个列表:
List<Car> cars = db.Car.Where(x => x.ProductionYear == 2005).ToList();
然后我尝试使用这样的 LINQ 将两个大表加入这个列表:
var joinedList = (from car in cars
join driver in db.Driver.ToList()
on car.Id equals driver.CarId
join building in db.Building.ToList()
on driver.BuildingId equals building.Id
select new Building
{
Name = building.Name;
Id = building.Id;
City = building.City;
}).ToList();
Driver 和 Building 表都有大约 100 万行。当我运行此连接时,我会出现内存不足异常。我怎样才能使这个加入工作?我应该对数据库进行连接操作吗?如果是,我如何将cars 列表带到数据库?提前致谢。
【问题讨论】:
-
db.Driver.ToList()从这里删除ToList(),它将阻止获取内存中的整个驱动程序表。同样来自db.Building。 -
@RahulSingh 我这样做了,但我仍然得到异常。
-
你打算用这些收藏做什么?
-
是的,如果您的 join 仍然产生数十亿条记录,那将无济于事。您应该分批过滤和获取数据(如果在 UI 中显示此数据或其他内容)。
-
@GiladGreen 我正在尝试为每辆车获取相应的建筑物。
标签: c# linq join out-of-memory