我希望通过传入ID列表来保存实体集合,并保留订单。
另一个SO答案https://stackoverflow.com/a/15187081/1059911建议采用这种方法来保护效果很好的实体
var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();
然而,集合中实体的顺序与Ids的顺序不同
有没有办法保存订单?
答案 0 :(得分:2)
可能有帮助:
var entities = db.MyEntities
.Where(e => myListOfIds.Contains(e.ID))
.OrderBy(e => myListOfIds.IndexOf(e.ID)).ToList();
修改强>
JohnnyHK 澄清说这不适用于LINQ to Entities。为此,您需要订购 IEnumerable 而不是 IQueryable ,因为 IQueryProvider 不知道如何处理本地列表 IndexOf 方法向服务器发送查询时。但是在 AsEnumerable() OrderBy 方法处理本地数据之后。所以你可以这样做:
var entities = db.MyEntities
.Where(e => myListOfIds.Contains(e.ID))
.AsEnumerable()
.OrderBy(e => myListOfIds.IndexOf(e.ID)).ToList();
答案 1 :(得分:1)
实体框架包含所有LINQ命令的子集,因此您不会拥有LINQ to Objects所具有的所有命令。
以下方法应按照myListOfIds提供的顺序为您提供MyEntities列表:
var entities = myListOfIds.Join(db.MyEntities, m => m, e => e.ID, (m,e) => e)
.ToList();