如何订购由ID列表创建的LinQ结果集,并命令它使用列表的现有顺序

时间:2013-09-03 09:13:29

标签: linq sorting

我的代码是这样的:

List<int> IDs = new List<int> {9,7,38, 23}
IQueryable<Post> pp = myDataEntity.Posts.Where(p=>IDs.Contains(p.ID));

如何解释我想按ID中ID的顺序对pp进行排序?谢谢。

3 个答案:

答案 0 :(得分:1)

假设您想要保留ID中的ID顺序,而不是实际上是它的订购版本,那么您可以这样做:

var pp = IDs.Select(x=> myDataEntity.Posts.Where(p=>p.ID == x))
            .SelectMany(x=>x);

使用ID作为外部集合,您可以保持元素的顺序。

答案 1 :(得分:1)

您可以按List.IndexOf订购:

IQueryable<Post> orderedPosts myDataEntity.Posts
    .Select(p  => new { Post=p, Index=IDs.IndexOf(p.ID) })
    .Where(x   => x.Index >= 0)
    .OrderBy(x => x.Index)
    .Select(x  => x.Post);

答案 2 :(得分:0)

使用OrderByDescending

IQueryable<Post> pp = myDataEntity.Posts.Where(p=>IDs.Contains(p.ID))
                                        .OrderByDescending(p => p.ID)