【问题标题】:Using LINQ to order a list using an existing array使用 LINQ 使用现有数组对列表进行排序
【发布时间】:2010-09-09 10:07:23
【问题描述】:
class Car{
     int ID {get;set;}
     string Text {get;set;}
}

List<Car> allCars = new List<Car>(){ new Car{ ID = 1, Text = "one"}, new Car{ ID = 2, Text = "two"}, new Car{ ID = 3, Text = "three"}, new Car{ ID = 4, Text = "four"} };
int[] existingCarIds = new int[]{ 2, 4 };

我想要这份清单。

CarWithID2
CarWithID4
CarWithID1
CarWithID3

所以我做到了:

List<Car> carList = allCars.Where(d => existingCarIds.Contains(d.ID)).Concat(allCars.Where(d => !existingCarIds.Contains(d.ID))).ToList();

还有其他方法可以进行相同的查询吗?

谢谢

洛伦佐。

【问题讨论】:

    标签: c# linq .net-3.5


    【解决方案1】:

    使用OrderBy - 至少,它会更好地显示正在发生的事情:重新排序。

    如果您需要按照与数组完全相同的顺序对列表进行排序,请使用

    var reordered = allCars.OrderBy(car=>
        {
            var index = Array.IndexOf(existingCars, car.ID);
            return index<0 ? int.MaxValue : index; // put elements that don't have matching ID in the end
        });
    

    此查询按existingCars 数组中的索引排序,数组中没有匹配 id 的元素排在最后。

    【讨论】:

      【解决方案2】:

      你可以使用OrderBy:

      List carList = allCars.OrderBy(d => !existingCarIds.Contains(d.ID)).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        相关资源
        最近更新 更多