我的课程如下
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'。
那问题是什么,可以帮助我解决它。
答案 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;
}