LINQ to List <t>给出错误</t>

时间:2012-01-07 06:33:26

标签: c# linq

我的课程如下

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

我有一个像这样的列表

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

然后有一个方法

public Person SelectPerson(string name)
{
  var q = from p in persons where p.Name==name select p;
  return (Person)q;
}

但它给出了这样的错误 无法将'WhereListIterator`1 [PrsLst.Person]'类型的对象强制转换为'PrsLst.Person'。
那问题是什么,可以帮助我解决它。

4 个答案:

答案 0 :(得分:6)

public Person SelectPerson(string name)
{
  var q = from p in persons where p.Name==name select p;
  return q.FirstOrDefault();
}

答案 1 :(得分:3)

尝试,

public Person SelectPerson(string name)
{
  var q=(from p in persons where p.Name==name select p).FirstOrDefault();;
  return q;
}

答案 2 :(得分:3)

问题是查询的结果是一个项集合,即使集合恰好只包含一个项目。

使用Single方法从集合中获取单个项目。它还验证集合实际上只包含一个项目,如果没有,则抛出异常。

由于已知集合包含Person个项目,因此您无需将结果强制转换为Person

public Person SelectPerson(string name) {
  var q = from p in persons where p.Name==name select p;
  return q.Single();
}

如果结果为空,Single方法也会抛出异常。如果您想在这种情况下返回null,则可以使用SingleOrDefault方法。

答案 3 :(得分:2)

public Person SelectPerson(string name)
{
    Person q = (from p in persons where p.Name==name 
               select p).FirstOrDefault();
    return q;
}