2013-04-03 55 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();