如何根据其他列表订购列表

时间:2014-03-04 03:58:50

标签: c# lambda expression

我有自定义对象类型List<T> ListT的列表<T>

现在列表中有两个项目,一个位于ID = 1089,另一个位于ID = 1090

基于某些逻辑,我将使用以下方式对ListT进行排序:

ListT = ListT.OrderByDescending(x=>x.Order.HasValue).ThenBy(x=>x.Order).ToList();

完成上述查询后,ListT现在将ID = 1090作为第一项,将ID = 1089作为第二项。

现在我将从数据库中检索另一个新列表ListB。样本数据如下:

enter image description here

我的目标是重新排列ListB,以便IDListB的顺序遵循IDListT的顺序,然后重新排列ListB以便按升序排列Order值。

最后,预期结果应为:

enter image description here

1 个答案:

答案 0 :(得分:2)

或许这样的事情:

public class Foo {
    public int ID { get; set; }
    public int? Order { get; set; }

    public Foo(int id, int? order) {
        ID = id;
        Order = order;
    }
}

static void Main(string[] args) {

    var ListT = new List<int> {1090,1089};
    var ListTOrder = ListT.Select((x, index) => new { Item = x, Index = index }).ToDictionary(x => x.Item, x => x.Index);

    List<Foo> ListB = new List<Foo> {
        new Foo(1089, 1),
        new Foo(1089, 3),
        new Foo(1089, 4),
        new Foo(1089, null),                
        new Foo(1090, 1),
        new Foo(1090, 3),
        new Foo(1090, 4)
    };

    ListB = ListB.OrderBy(x => ListTOrder[x.ID]).ThenBy(x => x.Order).ToList();
}

小提琴:http://dotnetfiddle.net/th5fRD