0

我有一个长度 > 3000 的整数数组int[] ids。我想从数据库表中获取前 15 条记录,顺序为Array.IndexOf(ids, recordId).

我在做:

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 查询

4

1 回答 1

2

你可以把它转过来。

  1. 从您的数组中选择 id
  2. 仅获取您实际需要的记录
  3. 将获取的记录投射回您的 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 条记录,并且仍然按照我希望它们的顺序返回它们。

于 2013-06-27T02:00:32.810 回答