您好我有以下方法和linq语句。
public prO Getproject(int id)
{
var tt = (from c in db.pdi
where c.id==id
select new prO
{
name = c.p.name,
pr_id = c.p.pr_id,
re = c.p.re
});
return tt;
}
上述方法返回一个tt值。但是我一直得到intelicense错误
(局部变量)IQueryable<prO>tt
错误:
cannot implicitly convert system.linq.iqueryable to prO
请告诉我如何解决此错误。谢谢
答案 0 :(得分:3)
您正在使用查询返回一个集合。 由于您只想将一个项目更改为:
public prO Getproject(int id)
{
var tt = (from c in db.pdi
where c.id==id
select new prO
{
name = c.p.name,
pr_id = c.p.pr_id,
re = c.p.re
//change here
}).FirstOrDefault();
return tt;
}
该错误告诉您以下内容:您的方法的返回类型为prO
,但您的查询不会返回此类型。你无处可定义,你正在兴奋地返回prO
项中的一项。就编译器而言,可能有1000个具有匹配Id的项目。
编辑:
根据Rawlings评论,最好使用SingleOrDefault()
。这两个解决方案本身都在工作,不同之处在于FirstOrDefault
会返回任意数量的结果,但只占第一个,而Single
或SingleOrDefault
会让查询本身返回一个项目
注意,如果您的查询返回 more 而不是1个结果,则FirstOrDefault会显示第一个结果。 SingleOrDefault会抛出异常。
答案 1 :(得分:2)
使用return tt.FirstOrDefault();