2013-04-03 77 views

回答

2

可能帮助:

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(); 
+0

感谢@shibormot - 因为我需要的工作。 – SeanR 2013-04-04 07:03:52

+0

这不适用于LINQ-to-Entities,除非您在'OrderBy'之前调用'AsEnumerable()'。 – JohnnyHK 2014-08-07 03:15:30

1

实体框架包含了所有的LINQ的命令的子集,所以你不会再有这样的LINQ to对象具有的所有命令。

下面的方法应该给你MyEntities的列表以相同的顺序由myListOfIds提供:

var entities = myListOfIds.Join(db.MyEntities, m => m, e => e.ID, (m,e) => e) 
       .ToList();