Ada*_*ick 8 c# sql linq entity-framework
我正在尝试对linq查询进行排序,以便按List [int]中找到的ID的顺序返回结果.这是我当前的代码返回它们很好,但没有排序.
IEnumerable<NPost> nposts;
List<int> npostIDs = (from tc in db.TopComs
where tc.Type == "Comments"
select tc.NPostID).ToList();
nposts = from np in repository.NPosts
where npostIDs.Contains(np.NPostID)
select np;
Run Code Online (Sandbox Code Playgroud)
我怎样才能让nposts以List [int]中存在npostID的顺序返回结果?
IEnumerable<NPost> nposts = from np in repository.NPosts
let index = npostIDs.IndexOf(np.NPostID)
where index >= 0
orderby index ascending
select np;
Run Code Online (Sandbox Code Playgroud)
根据你的错误,我有另一个建议.我不是100%肯定它是否会在EF中起作用,但试一试并让我知道.还有另外一个我知道会有用的想法,但它不会表现得那么好.
IEnumerable<NPost> nposts = from npostID in npostIDs.AsQueryable()
join np in repository.NPosts
on npostID equals np.NPostID
select np;
Run Code Online (Sandbox Code Playgroud)
这将保持npostIDs无orderby条款的顺序.如果它ObjectContext是相同的(如果不是),你实际上应该能够在一个查询中完成它.但是,目前尚不清楚是否要缓存npostIDs列表,因此这可能不是一个选项.无论如何,这里:
IEnumerable<NPost> nposts = from tc in db.TopComs
where tc.Type == "Comments"
join np in repository.NPosts
on tc.NPostID equals np.NPostID
select np;
Run Code Online (Sandbox Code Playgroud)
接受的答案是正确的,我只是想提供这个答案的方法版本:
IEnumerable<NPost> nposts = repository.NPosts
.Where(np => npostIDs.IndexOf(np.NPostID) >= 0)
.OrderBy(np => npostIDs.IndexOf(np.NPostID));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3258 次 |
| 最近记录: |