微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

包含Linq中的数据过多:如何提高性能

如何解决包含Linq中的数据过多:如何提高性能

我有一个这样的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 举报,一经查实,本站将立刻删除。