【发布时间】:2016-09-06 12:48:34
【问题描述】:
我有一些 Ids 存储在下面的变量中:
List<int> Ids;
现在我想根据上面的 ID 获取记录,但顺序与上面Ids.中的顺序相同
例如:数据库中的记录是这样的:
员工:
Id
1
2
3
4
5
现在,如果 Ids 数组包含这样的 Id:4,2,5,3,1,那么我将尝试仅按此顺序获取记录:
查询:
var data = context.Employee.Where(t => Ids.Contains(t.Id)).ToList();
但上面的查询给我的输出就像在表格中一样:
Id
1
2
3
4
5
预期输出:
Id
4
2
5
3
1
更新:我已经尝试过以下解决方案,但由于这是实体框架,它没有成功:
var data = context.Employee.Where(t => Ids.Contains(t.Id))
.OrderBy(d => Ids.IndexOf(d.Id)).ToList();
为了使上述解决方案发挥作用,我必须添加到列表中:
var data = context.Employee.Where(t => Ids.Contains(t.Id)).ToList()
.OrderBy(d => Ids.IndexOf(d.Id)).ToList();
但我不想在内存中加载数据然后过滤掉我的记录。
【问题讨论】:
-
您也需要付出一些努力。请阅读How to Ask 并分享您的研究。这个问题已经被问过很多次了,例如duplicate。
-
@CodeCaster 我找不到 Ids 的 Indexof 方法。所以这个问题对你来说是重复的吗?
-
@CodeCaster Indexof 方法不适用于实体框架,因此在将问题标记为重复之前,请仔细阅读问题。谢谢
-
然后添加一个 .ToList() 。同样,搜索并分享您的研究,这个问题不是唯一的。
-
更好的做法是使用
.AsEnumerable()而不是.ToList()来停止数据库端的处理并继续在内存端。后者立即执行查询并创建一个List<T>,而前者仍然是一个延迟执行的查询等等。它只是停止向 SQL 查询添加内容,然后在内存中执行。
标签: c# entity-framework linq