我有一个简单的方法,我从数据库中检索数据并将其发送到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>)
但没有帮助。谁能建议我如何修改我的代码?
答案 0 :(得分:5)
问题是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();
答案 1 :(得分:4)
通过
var dev = db.Devices;
您声明dev
属于DbSet<Device>
类型。 Where-methods返回IQueryable,因此,您不能使用变量dev
。更改声明如下:
var dev = db.Devices.AsQueryable();