c# – 按内存列表中的另一个内存列表排序

可以通过另一个列表对内存列表进行排序(第二个列表将是参考数据源或类似的东西)?public class DataItem{public string Name { get; set; }public string Path { get; set; }}// a list of Data Items, randomly s...

可以通过另一个列表对内存列表进行排序(第二个列表将是参考数据源或类似的东西)?

public class DataItem
{
    public string Name { get; set; }
    public string Path { get; set; }
}

// a list of Data Items, randomly sorted
List<DataItem> dataItems = GetDataItems();

// the sort order data source with the paths in the correct order
IEnumerable<string> sortOrder = new List<string> {
    "A",
    "A.A1",
    "A.A2",
    "A.B1"
};

// is there a way to tell linq to sort the in-memory list of objects
// by the sortOrder "data source"
dataItems = dataItems.OrderBy(p => p.Path == sortOrder).ToList();

解决方法:

首先,让我们为sortOrder中的每个项目分配一个索引:

var sortOrderWithIndices = sortOrder.Select((x, i) => new { path = x, index = i });

接下来,我们加入两个列表并排序:

var dataItemsOrdered =
 from d in dataItems
 join x in sortOrderWithIndices on d.Path equals x.path //pull index by path
 orderby x.index //order by index
 select d;

这也是你在SQL中的方式.

本文标题为:c# – 按内存列表中的另一个内存列表排序

基础教程推荐