Linq隐式转换为类型

时间:2014-03-18 07:44:35

标签: c# linq

您好我有以下方法和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

请告诉我如何解决此错误。谢谢

2 个答案:

答案 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会返回任意数量的结果,但只占第一个,而SingleSingleOrDefault会让查询本身返回一个项目

注意,如果您的查询返回 more 而不是1个结果,则FirstOrDefault会显示第一个结果。 SingleOrDefault会抛出异常。

答案 1 :(得分:2)

使用return tt.FirstOrDefault();

相关问题