繁体   English   中英

从实体框架过滤数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM