gpt4 book ai didi

c# - Linq 连接上的 System.OutOfMemoryException

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:31 24 4
gpt4 key购买 nike

我在下面有这个查询:

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

关于c# - Linq 连接上的 System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43556006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com