我第一次在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; }
}
答案 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()
呢?