LINQ - 不能隐含转换类型,显式转换exsist

时间:2016-01-02 15:59:36

标签: c# asp.net linq

我第一次在C#中使用查询,而我遇到这个简单的问题。

这是我的控制器

public ActionResult Index()
{
    string campus = Request.Params["Campus"];

    if (campus != null)
    {
        if (campus == "Alle")
        {
            return View(db.Teachers.ToList());
        }
        else
        {
            var teachers = (from t in db.Teachers
                            where t.Campus == campus
                            select t);

            var Model = new ViewModel
            {
                Teachers = teachers.ToList(),
            };
            return View(Model);
        }
    }
    else
    {
        return View(db.Teachers.ToList());
    }           
}

这是 ViewModel

的模型
public class ViewModel
{
    public IQueryable<Teacher> Teachers { get; set; }
    public IQueryable<Skill> Skills { get; set; }
}

但是,我无法让Query工作,它总是在

下给我一个红线
Teachers = teachers.ToList()

错误

  

不能隐含转换类型   'System.Collections.Generic.List'到   'System.Linq.IQueryable'。一个明确的   转换exsist。

我很确定这是一个非常简单的修复方法,但我已经尝试了很多东西,而且我不能马上把它弄清楚。

如果你需要它,这是我的教师班级

public class Teacher
{
    [key]
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Campus { get; set; }

    public virtual List<Skill> Skills { get; set; }
}

2 个答案:

答案 0 :(得分:1)

问题在于:

Teachers = teachers.ToList()

尝试将List<Teacher>分配给IQueryable<Teacher>

我认为您可能希望您的ViewModel保留实际数据,而不是查询,因为您在创建后立即返回它们。这意味着您可以使用IQueryable<T>List<Teacher>来存储查询的实际结果,而不是使用IList<Teacher>来保存延迟查询

public class ViewModel
{
    public IList<Teacher> Teachers { get; set; }
    public IList<Skill> Skills { get; set; }
}

现在Enumerable.ToList调用将起作用。

答案 1 :(得分:0)

问题是你的Teachers对象是Teacher的IQueryable,你尝试为它分配一个列表,由于List没有实现该接口,因此无法完成。为什么你还需要.ToList()呢?