Linq隐式转换为类型
本文关键字:类型 转换 Linq | 更新日期: 2023-09-27 17:50:48
嗨,我有下面的方法,里面有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的一个值。然而,我一直得到情报错误(局部变量)IQueryable<prO>tt
错误:
cannot implicitly convert system.linq.iqueryable to prO
请告诉我如何处理这个错误。由于
您的查询将返回一个集合。由于您只需要一个项目,因此将查询更改为:
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。
编辑:根据罗林斯的评论,用SingleOrDefault()
代替比较好。两种解决方案本身都是有效的,不同之处在于FirstOrDefault
返回任意数量的结果,但只取第一个,而Single
或SingleOrDefault
让查询本身只返回一个项目。
注意,如果查询返回的多于一个结果,则FirstOrDefault显示第一个结果。SingleOrDefault会抛出异常
使用return tt.FirstOrDefault();