2012-04-24 251 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(); 
相關問題