我想通过传入Idds列表来保存实体集合,并保存顺序。使用.Contains时保留返回实体的顺序(Id)
另一个SO回答https://stackoverflow.com/a/15187081/1059911建议这种方法补水伟大的工程实体
var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();
但是实体的集合中的顺序是从IDS
的顺序不同有保护办法命令?
我想通过传入Idds列表来保存实体集合,并保存顺序。使用.Contains时保留返回实体的顺序(Id)
另一个SO回答https://stackoverflow.com/a/15187081/1059911建议这种方法补水伟大的工程实体
var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();
但是实体的集合中的顺序是从IDS
的顺序不同有保护办法命令?
可能帮助:
var entities = db.MyEntities
.Where(e => myListOfIds.Contains(e.ID))
.OrderBy(e => myListOfIds.IndexOf(e.ID)).ToList();
编辑
JohnnyHK明确的是该不会与LINQ工作的实体。对于这个工作,你需要订购的IEnumerable而不是的IQueryable,因为IQueryProvider不知道如何应对本地列表的IndexOf时发送查询服务器方法。但AsEnumerable()OrderBy方法处理本地数据。所以,你可以这样做:
var entities = db.MyEntities
.Where(e => myListOfIds.Contains(e.ID))
.AsEnumerable()
.OrderBy(e => myListOfIds.IndexOf(e.ID)).ToList();
实体框架包含了所有的LINQ的命令的子集,所以你不会再有这样的LINQ to对象具有的所有命令。
下面的方法应该给你MyEntities的列表以相同的顺序由myListOfIds提供:
var entities = myListOfIds.Join(db.MyEntities, m => m, e => e.ID, (m,e) => e)
.ToList();
感谢@shibormot - 因为我需要的工作。 – SeanR 2013-04-04 07:03:52
这不适用于LINQ-to-Entities,除非您在'OrderBy'之前调用'AsEnumerable()'。 – JohnnyHK 2014-08-07 03:15:30