我想通過傳入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