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

请告诉我如何处理这个错误。由于

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   
                //change here                           
                }).FirstOrDefault();
      return tt;
 }

错误告诉你以下内容:你的方法有一个返回类型prO,但是你的查询没有返回这个类型。你在任何地方都没有定义,你只返回prO的一个项目。对于编译器而言,可能有1000个项目具有匹配的Id。

编辑:根据罗林斯的评论,用SingleOrDefault()代替比较好。两种解决方案本身都是有效的,不同之处在于FirstOrDefault返回任意数量的结果,但只取第一个,而SingleSingleOrDefault让查询本身只返回一个项目。

注意,如果查询返回的多于一个结果,则FirstOrDefault显示第一个结果。SingleOrDefault会抛出异常

使用return tt.FirstOrDefault();