如何通过linq非常具体地对集合进行排序

Fre*_*ood 0 .net c# linq sorting linq-to-objects

var ids = new int[] { 3, 2, 20, 1 };
var entities = categories.Where(entity => ids.Contains(entity.Id));
Run Code Online (Sandbox Code Playgroud)

我必须像在ids数组中那样对实体进行完全相同的排序.我怎样才能做到这一点 ?

spe*_*der 6

这应该做的伎俩(写在我的头顶,所以可能有错误)

var ids = new int[] { 3, 2, 20, 1 };
var ordering = ids.Select((id,index) => new {id,index});
var entities = 
    categories
        .Where(entity => ids.Contains(entity.Id))
        .AsEnumerable() //line not necessary if 'categories' is a local sequence
        .Join(ordering, ent => ent.Id, ord => ord.id, (ent,ord) => new {ent,ord})
        .OrderBy(x => x.ord.index)
        .Select(x => x.ent)
Run Code Online (Sandbox Code Playgroud)