【发布时间】:2013-06-27 01:12:45
【问题描述】:
我有一个长度 > 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 条。
有没有办法解决这个问题?谢谢。
一些现有的帖子:
Load Records From EF Data Model in Custom/Predefined Order Using LINQ
【问题讨论】:
-
ids 中的项目是否已经按某种排序顺序排列?将记录 ID 升序或降序排序是一种选择吗?
-
@triad_Mike:不是 ids 中的项目是从我使用的搜索引擎工具中随机获得的。 :(
-
能否保证该查询一次只运行一次?
-
@SimonBelanger:对于 Web 项目中的每个请求,查询只会运行一次。
标签: c# sql-server entity-framework linq-to-entities