如何在C#中使用LINQ选择单个实体

use*_*810 1 c# linq lambda visual-studio-2010

我想创建一个查询,从人员列表(人员)返回特定的人(通过ID).

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

但是我遇到了关于投射问题的错误.我试图投射res到人物,但它不适用于此.我该如何解决?

mar*_*rko 7

var res= (from p in persons
                         where p.pID == pID
                         select p).SingleOrDefault();
            return res;
Run Code Online (Sandbox Code Playgroud)


Eoi*_*ell 6

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

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

 var res = (from p in persons
            where p.pID==pID
            select p).FirstOrDefault();
 return res;
Run Code Online (Sandbox Code Playgroud)

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

或者SingleOrDefault(),如果找到多个结果,您可以使用哪个会抛出异常.

无论是SingleOrDefault()FirstOrDefault()方法支持通过过滤器给他们,让你也可以简化您的查询到1线LAMBDA声明.

return persons.FirstOrDefault(p => p.pID == pID);
Run Code Online (Sandbox Code Playgroud)