如何解决包含Linq中的数据过多:如何提高性能
from a in context.table_A
join b in
(from temp in context.table_B
where idlist.Contains(temp.id)
select temp)
on a.seq_id equals b.seq_id into c
where
idlist.Contains(a.id)
select new MyObject
{
...
}).ToList();
- idlist是列表
- 我遇到的问题是idlist的值太多(数十万到几百万条记录)。很少记录的情况下工作正常,但是当记录太多时,contains函数会出错。
错误日志是
由于缺少内部资源,无法创建查询计划 查询处理器。这是罕见的事件,仅在 复杂查询或引用大量查询的查询 表或分区。简化查询。
我想提高本节的性能。有什么想法吗?
解决方法
我建议安装扩展linq2db.EntityFrameworkCore,并使用具有快速BulkCopy的临时表
public class IdItem
{
public int Id { get; set; }
}
...
var items = idList.Select(id => new IdItem { Id = id });
using var db = context.CreateLinqToDBConnection();
using var temp = db.CreateTempTable("#IdList",items);
var query =
from a in context.table_A
join id1 in temp on a.Id equals id1.Id
join b in context.table_B on a.seq_id equals b.seq_id
join id2 in temp on b.Id equals id2.Id
select new MyObject
{
...
};
// switch to alternative translator
var query = query.ToLinqToDB();
var result = query.ToList();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。