2013-06-03 41 views
3

我有一個類,我創立了集這樣訂單數據表使用LINQ基於一類集合

class Foo 
{ 
    public int ID { get; set; } 
    // ID will remain unique in collection 

    public string Name { get; set; } 
} 

List<Foo> sc = new List<Foo>(); 

sc.Add(new Foo() 
{ 
    ID = 0, 
    Name= "Michael" 
}); 

sc.Add(new Foo() 
{ 
    ID = 2, 
    Name= "Natasha" 
}); 

sc.Add(new Foo() 
{ 
    ID = 1, 
    Name= "Casandra" 
}); 

然後我得到一個DataTable

DataTable dt = GetDataTableMethod(); 

數據表只包含名稱而不包含ID,並且名稱總是少於集合。 (bcoz集合是主集合)

現在我想根據"name"對我的數據表進行排序,但基於對基於id的Foo Class集合進行排序。排序數據表後

結果應該是

Michael 
Casandra 
Natasha 

我試圖

var v = dt.Rows.Cast<DataRow>().OrderBy(What should i write here?); 
+1

只是猜測這裏,但確實'變種V = dt.Rows.Cast ().OrderBy(row => row [「Name」]);'work? –

+0

'var v = dt.Rows.Cast ().OrderBy(c => c [「name」]);'? – Leri

+0

@ChrisSinclair:看問題的結果。你會回答Casandra,Michael,Natasha。 –

回答

2

據我理解你的問題,你有一個返回DataTable只含集合其中有數據,包括ID和存儲過程它的一個組成部分。最簡單的方式是通過數據行的列表迭代和之後的完整列表,順序相匹配相應的值:

List<Foo> sc = new List<Foo>(); 

sc.Add(new Foo() 
{ 
    ID = 0, 
    Name = "Michael" 
}); 

sc.Add(new Foo() 
{ 
    ID = 2, 
    Name = "Natasha" 
}); 

sc.Add(new Foo() 
{ 
    ID = 1, 
    Name = "Casandra" 
}); 

List<string> dt = new List<string>(); //For testing replaced just by string. 

dt.Add("Michael"); 

dt.Add("Natasha"); 

dt.Add("Casandra"); 

var ordered = dt.Select(i => sc.First(c => c.Name == i)).OrderBy(i => i.ID); 

Demo (sorry for awful formatting).

相關問題