2012-04-24 38 views
4

我目前陷入了一个问题,其中有2个列表,我想根据第一个列表中的值对第二个列表进行排序,这里有一个例子:C#根据来自另一个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} 
} 

所以可以说我有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" 

我试过Google的排序方式,但所有的LINQ语法混淆我,我有问题,由于每个对象的类的差异:(我唯一能想到的方法是有一个for循环来获得一个List的ID的索引,并做一些冒泡排序,但它太麻烦了,而且效率低下。非常感谢帮助!

+0

可能重复的[C#:如何排序基于字符串列表的对象的列表](http://stackoverflow.com/questions/9633426/c-sharp-how-to-sort-a-list-of -object-on-a-list-of-string) – nawfal 2013-10-15 15:09:30

回答

5

你可以加入对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(); 
+0

谢谢,我大致看到LINQ如何在你的例子中工作,而且它也很棒! +1 – FZFalzar 2012-04-24 10:46:14

0

像这样的事情可以做的伎俩(伪):

dataToSort sortedData; 

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

您可以加入两个列表和order by IndexOf

var ordered = (from ds in dataToSort 
       join d in data 
       on ds.ID equals d.ID 
       orderby data.IndexOf(d) 
       select ds).ToList(); 
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 
0

这应该做的伎俩:

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