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();
我有以下查询:
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();