5

我目前遇到一个问题,我有 2 个列表,我想根据第一个列表中的值对第二个列表进行排序,这是一个示例:

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}
}

假设我有 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"

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

dataToSort: "80", "XC", "YC"
            "47", "XB", "YB"
            "153","XD", "YD"
            "21", "XA", "YA"

我已经尝试在谷歌上搜索一种对这些进行排序的方法,但是所有 LINQ 语法都让我感到困惑,而且由于每个对象的类不同,我遇到了问题:(我能想到的唯一方法是有一个 for 循环来获取索引一个List的ID并做一些类似冒泡排序的事情,但它太麻烦而且效率低下。非常感谢帮助!

4

5 回答 5

6

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

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

var result = query.ToList();

这保持了第一个列表的顺序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();
于 2012-04-24T10:32:53.713 回答
0

This should do the trick:

var list = dataList
           .Select(data => dataToSortList
               .First(x => x.ID == data.ID)
           )
           .ToList();
于 2012-04-24T10:37:43.630 回答
0
List<data> lstofdata = new List<data>();
List<dataToSort> lstdataToSort = new List<dataToSort>();

var q = from d in lstofdata 
        join s in lstdataToSort on d.ID equals s.ID 
        orderby d.Name 
        select s
于 2012-04-24T10:36:07.407 回答
0

像这样的东西可以解决问题(伪代码):

dataToSort sortedData;

foreach data
{
    sortedData.AddRange(from unsortedData.Where(x => x.ID == data.ID));
}
于 2012-04-24T10:31:58.503 回答
0

您可以同时加入列表并按以下顺序订购IndexOf

var ordered = (from ds in dataToSort
              join d in data
              on ds.ID equals d.ID
              orderby data.IndexOf(d)
              select ds).ToList();
于 2012-04-24T10:33:02.497 回答