Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C根据另一个列表(不同类别)的值序列对列表进行排序_C#_.net_Linq - Fatal编程技术网

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

C# C根据另一个列表(不同类别)的值序列对列表进行排序,c#,.net,linq,C#,.net,Linq,我目前遇到一个问题,我有两个列表,我想根据第一个列表中的值对第二个列表进行排序,下面是一个示例: 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 ti

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

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}
}
假设我有两个List对象,一个用于data,一个用于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循环来获取一个列表ID的索引,并执行类似于气泡排序的操作,但这太麻烦了,而且效率也很低。非常感谢您的帮助

类似这样的东西可以实现伪代码:

dataToSort sortedData;

foreach data
{
    sortedData.AddRange(from unsortedData.Where(x => x.ID == data.ID));
}

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

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

var result = query.ToList();
这将保持第一个列表数据的顺序

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

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();

您可以通过IndexOf连接列表和订单


这应该可以做到:

var list = dataList
           .Select(data => dataToSortList
               .First(x => x.ID == data.ID)
           )
           .ToList();

谢谢,我现在从您的示例中大致了解了LINQ的工作原理,它也非常有效+1可能的副本
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
var list = dataList
           .Select(data => dataToSortList
               .First(x => x.ID == data.ID)
           )
           .ToList();