Linq Joins上的System.OutOfMemoryException

jas*_*son 1 c# linq entity-framework out-of-memory

我有以下查询:

var data = (from ftr in db.TB_FTR
            join mst in db.TB_MST on ftr.MST_ID equals mst.MST_ID
            join trf in db.TB_TRF on mst.TRF_ID equals trf.ID
            select new TRFData 
            { 
                City = ftr.FTR_CITY, 
                County = ftr.FTR_COUNTY, 
                Type = trf.TRF_TYPE 
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

TB_FTR表包含3,000,000行,TB_MST包含1,100,000行,TB_TRF包含340行.如何使此加入工作?这有诀窍或解决方法吗?谢谢.

Chr*_*tos 5

调用ToList强制执行查询,并要求将查询的所有数据加载到List的内存中.不是采用这种方法,你可以使用流式方法,而不是像你一样使用缓冲区,你可以一次获得一个元素,甚至可以更好地按照分页方法获取前100个记录,然后接下来的100条记录(在另一个请求上),依此类推.

var items = (from ftr in db.TB_FTR
             join mst in db.TB_MST on ftr.MST_ID equals mst.MST_ID
             join trf in db.TB_TRF on mst.TRF_ID equals trf.ID
             select new TRFData 
             { 
                 City = ftr.FTR_CITY, 
                 County = ftr.FTR_COUNTY, 
                 Type = trf.TRF_TYPE 
             });

foreach(var item in items)
{
    // ..
}
Run Code Online (Sandbox Code Playgroud)

分页

var pageSize = 100;
var pageNumber = 1;

var first100Items = items.Skip(pageSize*PageNumber)
                         .Take(paeSize)
                         .ToList();
Run Code Online (Sandbox Code Playgroud)