C#根据另一个List(不同类)的值序列对List进行排序

FZF*_*zar 5 .net c# linq

我目前陷入了一个问题,我有2个列表,我想根据第一个List中的值对第二个List进行排序,这是一个例子:

public class data
{
    public string Name{get; set;}
    public int ID{get; set}
}
public class dataToSort
{
    public int ID{get; set;}
    public string retrievedData{get; set}
    public string timeStamp{get; set}
}
Run Code Online (Sandbox Code Playgroud)

所以假设我有2个List对象,一个用于数据,一个用于dataToSort,它们的内容如下:

data: "Alpha", "80"           dataToSort: "21", "XA", "YA"
      "Beta", "47"                        "47", "XB", "YB"
      "Charlie", "153"                    "80", "XC", "YC"
      "Delta", "21"                       "153","XD", "YD"
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是使dataToSort的顺序等于数据中ID的顺序,如下所示:

dataToSort: "80", "XC", "YC"
            "47", "XB", "YB"
            "153","XD", "YD"
            "21", "XA", "YA"
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用谷歌搜索来排序这些,但所有的LINQ语法混淆了我,我有问题,因为每个对象的类的差异:(我能想到的唯一方法是有一个for循环来获取索引一个List的ID并执行类似冒泡的排序,但它太麻烦而且效率低下.非常感谢帮助!

dtb*_*dtb 6

您可以在ID上加入两个列表:

var query = from x in data
            join y in dataToSort on x.ID equals y.ID
            select y;

var result = query.ToList();
Run Code Online (Sandbox Code Playgroud)

这保持了第一个列表的顺序data.


您也可以通过这种方式轻松组合这两个列表:

var query = from x in data
            join y in dataToSort on x.ID equals y.ID
            select new
            {
                x.Name,
                x.ID,
                y.retrievedData,
                y.timeStamp,
            };

var result = query.ToList();
Run Code Online (Sandbox Code Playgroud)