2010-04-14 38 views
5

在C#中,由于下面的代码:C#转换LINQ VAR结果实际类型

public class Person 
{ 
    public int PersonID { get; set; } 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 

List<Person> people = new List<Person>(); 

    for (int i = 0; i != 15; i++) 
    { 
     Person p = new Person(); 
     p.PersonID = i; 
     p.Age = i * 12; 
     p.Name = "Name " + i; 
     people.Add(p); 
    } 


    var sortedPeople = from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople; 

我可以加载sortedPeople的结果返回到一个列表<人>无循环?

谢谢。

+3

请使用for(int i = 0; i <15; i ++)'来代替'for(int i = 0; i!= 15; i ++)' - 一些有趣而神秘的无限循环可以如果在块内修改了'i',则出现 – 2010-04-14 03:31:41

+0

如果您不明白var是编译器推断的类型声明,那么您不应该使用var。 – 2010-04-14 03:33:34

+1

@James Kolpack:无限循环至少很容易发现。如果你使用'i <15'并且发现这可能会更困难一点,那么我猜想会出现一些神秘的意外行为(重点是 - 修改块内的“i”无论如何都是通向地狱的道路)。 – 2010-04-14 03:46:34

回答

10

是的。有一个.ToList()扩展方法可用,所以你需要做的就是像这样调用它。

var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 

现在sortedPeople将是一个List<Person>代替IOrderedEnumerable<Person>

2
var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 
0
IEnumerable<Person> sortedPeople = from... 

固定!

另外:

List<Person> personList = sortedPeople.ToList(); 

注意,ToList方法遍历结果产生这个名单。