我是第一次在 C# 中使用查询,但我遇到了这个简单的问题。
这是我的 Controller
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; }
}
但是,我无法使查询正常工作,它总是在下面给我一条红线
Teachers = teachers.ToList()
错误
Cannot implicity convert type 'System.Collections.Generic.List' to 'System.Linq.IQueryable'. An explicit conversion 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; }
}
问题在于:
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
调用将起作用。
我是一名优秀的程序员,十分优秀!