过滤来自Entity Framework的数据

时间:2014-02-06 10:53:16

标签: c# linq 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>)

但没有帮助。谁能建议我如何修改我的代码?

2 个答案:

答案 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();