【问题标题】:Filtering data from Entity Framework从实体框架过滤数据
【发布时间】:2014-02-06 19:18:59
【问题描述】:

我有一个简单的方法,我从数据库中检索数据并将其发送到视图。但同时需要过滤数据。我有以下代码:

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>)

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

【问题讨论】:

标签: c# linq entity-framework


【解决方案1】:

问题是db.Devices 将是一个DbSet&lt;Device&gt; 集合,而不是IQueryable&lt;T&gt;,依此类推

dev = dev.Where(...)

Where 将返回 IQueryable&lt;T&gt; 并且给定 DbSet&lt;T&gt; 不能隐式设置为 IQueryable&lt;T&gt; 你会得到一个异常。

您需要在此处将您的DbSet&lt;T&gt; 转换为IQueryable&lt;T&gt;,这可以通过调用AsQueryable 轻松完成,即

var dev = db.Devices.AsQueryable();

【讨论】:

    【解决方案2】:

    var dev = db.Devices;
    

    您声明dev 的类型为DbSet&lt;Device&gt;。 Where 方法返回一个 IQueryable,因此您不能使用变量 dev。修改声明如下:

    var dev = db.Devices.AsQueryable();
    

    【讨论】:

    • 你的意思是IQueryable&lt;Device&gt;
    猜你喜欢
    • 2014-12-19
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2015-12-29
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多