0

我想通过传入一个 ID 列表来补充实体集合并保留顺序。

另一个 SO 答案https://stackoverflow.com/a/15187081/1059911建议使用这种方法来为实体补水,效果很好

var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();

但是集合中实体的顺序与 ID 的顺序不同

有没有办法保留订单?

4

2 回答 2

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();
于 2013-04-03T23:33:34.940 回答
1

实体框架包含所有 LINQ 命令的子集,因此您不会拥有 LINQ to Objects 拥有的所有命令。

以下方法应该以与 myListOfIds 提供的相同顺序为您提供 MyEntities 列表:

var entities = myListOfIds.Join(db.MyEntities, m => m, e => e.ID, (m,e) => e)
               .ToList();
于 2013-04-04T02:12:37.053 回答