2014-02-06 80 views
0

我有簡單的方法,我從數據庫檢索數據並將其發送到視圖。但在此期間,數據需要過濾。我有下面的代碼:從實體框架過濾數據

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()); 
    } 

,但我得到這個錯誤:

Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Data.Entity.DbSet'. An explicit conversion exists (are you missing a cast?)

我嘗試添加鑄如:

(DbSet<Device>) 

但沒有幫助。任何人都可以建議我如何修改我的代碼?

+0

請看看這個http://stackoverflow.com/questions/12788425/很容易做到can not-implicitly-convert-type-system-linq-iqueryable-to-system-data-entity-dbs – mit

回答

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(); 
4

通過

var dev = db.Devices; 

聲明devDbSet<Device>類型。 Where-methods返回一個IQueryable,因此您不能使用變量dev。更改聲明如下:

var dev = db.Devices.AsQueryable(); 
+0

你的意思是'IQueryable '。 – James

+0

@詹姆斯:謝謝你的提示;我已更新該帖子。 – Markus