[英]Filtering data from Entity Framework
我有一个简单的方法,可以从数据库中检索数据并将其发送到View。 但是与此同时,数据需要过滤。 我有以下代码:
public ActionResult Index(string Name, string Manufacturer)
{
var dev = db.Devices;
if(!String.IsNullOrEmpty(Name))
{
dev = dev.Where(w => w.Name.Contains(Name));
}
if(!String.IsNullOrEmpty(Manufacturer))
{
dev = dev.Where(w => w.Manufacturer.Contains(Manufacturer));
}
return View(dev.ToList());
}
但我收到此错误:
无法将类型“ System.Linq.IQueryable”隐式转换为“ System.Data.Entity.DbSet”。 存在显式转换(您是否缺少演员表?)
我尝试添加演员,例如:
(DbSet<Device>)
但是没有帮助。 谁能建议我如何修改我的代码?
问题是db.Devices
将是DbSet<Device>
集合,而不是IQueryable<T>
,因此在这些行上
dev = dev.Where(...)
在Where
将返回IQueryable<T>
并且给定的DbSet<T>
不能隐式设置为IQueryable<T>
您将获得异常。
您需要在这里执行的操作是将DbSet<T>
转换为IQueryable<T>
,这可以通过调用AsQueryable轻松实现,即
var dev = db.Devices.AsQueryable();
通过
var dev = db.Devices;
您将dev
声明为DbSet<Device>
类型。 Where方法返回一个IQueryable,因此,您不能使用变量dev
。 更改声明,如下所示:
var dev = db.Devices.AsQueryable();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.