1

我想做一个从人员列表(人员)返回特定人员(按 ID)的查询。

 public Person getThisID(int pID)
 {
     var res = from p in persons
                         where p.pID == pID
                         select p;
     return res;
 }

但是我收到了关于铸造问题的错误。我试图投射res到 Person 但它不起作用。我该如何解决?

4

10 回答 10

7
var res= (from p in persons
                         where p.pID == pID
                         select p).SingleOrDefault();
            return res;
于 2013-11-06T12:13:43.027 回答
6

select p;可能会返回多个结果。

用 .FirstOrDefault(); 包装您的查询

 var res = (from p in persons
            where p.pID==pID
            select p).FirstOrDefault();
 return res;

如果没有找到用户,这将返回一个null对象,如果找到许多用户,则返回具有该 ID 的第一个用户。

SingleOrDefault()或者,如果找到多个结果,您可以使用which 将引发异常。

SingleOrDefault()和方法都FirstOrDefault()支持向它们传递过滤器,因此您还可以将查询简化为 1 行 Lambda 语句。

return persons.FirstOrDefault(p => p.pID == pID);
于 2013-11-06T12:14:06.097 回答
3

假设Persons是一个Person集合,res是一个IEnumerable<Person>而不是一个人。如果您只期望一个结果,请使用该Single方法。

于 2013-11-06T12:13:55.170 回答
2

该查询将返回一个IEnumerable<Person>而不是一个Person。那是因为 where 可以返回多个结果。添加FirstOrDefault()到您的结果中,您就很好了:

public Person getThisID(int pID)
{
    var res = from p in persons where p.pID == pID select p;
    return res.FirstOrDefault();
}

这将返回满足条件的第一个实例,否则返回默认值,最有可能null

为了缩短时间,您还可以使用带有 lambda 表达式的 LinQ 方法:

return persons.FirstOrDefault(p => p.pID == pID);
//or...
return persons.Single(p => p.pID == pID);
于 2013-11-06T12:17:49.473 回答
1

如果人是List那么

var data = persons.Where( x => x.PID == pid).SingleOrDefault();  
return data 
于 2013-11-06T12:14:49.197 回答
1

仅使用FirstOrDefault

return persons.FirstOrDefault(p=> p.ID == pId);
于 2013-11-06T12:16:00.027 回答
0

尝试这个

 public Person getThisID(int pID)
        {
            Person res= (from p in persons
                         where p.pID==pID
                         select p).First();
            return res;
        }

应该管用 :)

于 2013-11-06T12:14:21.627 回答
0

您可以使用以下代码段

 persons.FirstOrDefault(p => p.id == pID);
于 2013-11-06T12:23:28.850 回答
0

很容易:

public Person getThisID(int pID)
{
    return persons.FirstOrDefault(p=> p.pID == pID);
}
于 2013-11-06T16:11:34.987 回答
-1

返回单个值时请使用 FirstOrDefault()

    var res= from p in persons
                 where p.pID==pID
                 select p.FirstOrDefault();  

Linq 优先或默认

于 2013-11-06T12:15:36.450 回答