System.OutOfMemoryException 关于 Linq 联接

System.OutOfMemoryException on Linq Joins

我有以下查询:

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();

TB_FTR table 包含 3,000,000 行,TB_MST 包含 1,100,000 行,TB_TRF 包含 340 行。我怎样才能使这个加入工作?这有什么技巧或解决方法吗?谢谢

调用 ToList 强制执行查询,并要求 all 将查询的数据加载到列表中的内存中。您可以使用流式方法而不是像您那样使用缓冲方法,而不是遵循这种方法,在这种方法中,您一次获取一个元素,或者更好的是,您可以采用分页方法获取前 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)
{
    // ..
}

分页

var pageSize = 100;
var pageNumber = 1;

var first100Items = items.Skip(pageSize*PageNumber)
                         .Take(paeSize)
                         .ToList();