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行.如何使此加入工作?这有诀窍或解决方法吗?谢谢.
调用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)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |