2017-02-24 94 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