2017-02-24 54 views
0

我想使用linq重新排列這個列表,但重新排序的列表務必與原始列表的類型相同(不是愚蠢的「var =」),並且「order by」被提供爲STRING(不正常OrderBy類型安全)。如何使用linq使用orderBy字符串重新排序列表的列表?

public class People{ 
public string Name { get; set; } 
public int Age { get; set; } } 

List<People> lst = new List<People>(); 
People p = new People(); 
p.Name = "AAA"; 
p.Age = 10; 
lst.Add(p); 

p = new People(); 
p.Name = "XXX"; 
p.Age = 5; 
lst.Add(p); 

List<People> orderedListByAge = lst.SomeSort("Age");  
List<People> orderedListByName = lst.SomeSort("Name"); 
+0

你不明白'var'是什麼?同時顯示你到目前爲止所做的。這是免費的代碼寫作網站。請參閱http://stackoverflow.com/help/how-to-ask和http://stackoverflow.com/help/mcve – bc004346

+0

_(沒有愚蠢的「var =」)_你爲什麼如此反對這個想法這種類型的短手?我不在乎linq查詢產生的數據類型,但它做了什麼。我的意思是,在每個查詢中使用.ToList()都不是linq的懶惰本質,也不會使查詢更容易。 – Mafii

+0

「var =」是愚蠢的,因爲1)記住我的無類型代碼,如可怕的語言JavaScript和視覺狐狸親。 2)在「var =」之後,如果您需要以輸入方式使用結果集,則需要投射。 3)在很多情況下,代碼的可讀性較差。例如:var = MyMethod()。您需要檢查方法的返回值以瞭解發生了什麼。 4)提醒我指點。我努力避免在代碼中使用「var =」。有很多方法可以使編碼更容易。根據我的愚見,「var =」不是其中之一。 – Freddy

回答

1

經過一番研究,我發現這個例子here

有一些例子有拉鍊。解決我的問題的類是「DynamicExample.cs」。鑄造是這樣完成的:

List<People> orderedByAge = (List<People>)DynamicExample.OrderBy(lst, "Age").Cast<People>().ToList(); 
1

你可以這樣做:

 List<People> lst = new List<People> { 
      new People { Name = "AAA", Age = 10}, 
      new People { Name = "XXX", Age = 5} 
     }; 

     List<People> foo = lst.OrderBy(x => x.Age).ToList(); 
     List<People> bar = lst.OrderBy(x => x.Name).ToList(); 
+0

你需要'ToList()' –

+0

是的,我沒有證明 - 讀它 – bc004346

+0

lst.OrderBy(x => x.Age)< - 其中是我提到的字符串「年齡」?這是常規的linc訂購系統。 – Freddy

相關問題