linq连接上的system.outofmemoryException



我有以下查询:

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表包含3,000,000行,TB_MST有1,100,000行,TB_TRF有340行。我该如何使此工作工作?有什么技巧或解决方法吗?谢谢。

调用 ToList您强制执行查询,然后问 asl 要加载在列表中的内存中的查询数据。您可以不用遵循这种方法,而是使用流式传输方法,而不是像您那样使用一种方法,您可以一次获得一个元素,甚至更好,甚至更好,您可以遵循分页方法来获取前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();

相关内容

最新更新