在给定整数数组的情况下,从数据库中加载一些记录,并保持数组的顺序,而不将所有记录加载到内存中
本文关键字:加载 数组 记录 顺序 内存 整数 情况下 数据库 | 更新日期: 2023-09-27 18:20:14
我有一个长度>3000的整数数组int[] ids
。我想按Array.IndexOf(ids, recordId)
的顺序从数据库表中获取前15条记录。
我正在做:
IQueryable<Record> records = from p in db.Records.Where(p => ids.Contains(p.Id))
select p;
records = records.ToList()
.OrderBy(p => Array.IndexOf(ids, p.Id)).AsQueryable().Take(15);
这是非常低效的,因为有3000多条记录被加载到内存中,而我只需要15条。
有办法解决这个问题吗?非常感谢。
一些现有职位:
使用LINQ 以自定义/预定义顺序从EF数据模型加载记录
将数组连接到EF查询
你可以扭转局面。
- 从数组中选择id
- 只获取您实际需要的记录
- 将提取的记录投影回您的id选择/订单
像这样:
假设我有一个100张专辑id的列表。比如说,按降序排列,取其中的15个id。
var ids = Enumerable.Range(1, 100);
var subsetOfIds = ids.OrderByDescending(i => i).Take(15);
var dbresults = Albums.Where(a => subsetOfIds.Contains(a.AlbumId)).ToArray();
var results = subsetOfIds.Select(id => new { IdFromArray = id, record = dbresults.First(album => album.AlbumId == id) }).ToArray();
现在我只从数据库中提取了这15条记录,并且仍然按照我希望的顺序将它们放回。