从IQueryable <t>转换为T </t>

时间:2013-03-15 23:11:08

标签: c# .net linq converter iqueryable

public DoctorClass GetById(int id)
    {
        using (var context = new EmrContext())
        {
            var query = from d in context.Doctors
                        join c in context.Users on d.Id equals c.Id
                        where d.Id==id
                        select new DoctorClass { Email = c.Email, FirstName = c.FirstName, LastName = c.LastName, Post = d.Post };
            return query;
        }
    }

这是错误:无法将类型'System.Linq.IQueryable'隐式转换为'Mvc.Models.DoctorClass'。存在显式转换(您是否错过了演员?)

我需要用“查询”来解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

在这种情况下,您几乎肯定希望使用Single()

return query.Single();

或者可能是SingleOrDefault()

return query.SingleOrDefault();

假设肯定只有一个这样的结果,如果有的话。 (两者之间的差异是如果没有匹配记录会发生什么。SingleOrDefault将返回null; Single将抛出异常。

如果合法地存在多个匹配,您应该考虑您想要发生的事情。例如,您可以使用First() / FirstOrDefault

答案 1 :(得分:0)

您将返回IQueryable<DoctorClass>,您需要返回DoctorClass

您可以使用:

return query.FirstOrDefault();

哪会返回query中的第一项。