2015-08-31 34 views
4

我試圖根據DbSet對象中的WHERE子句獲取行。我有這樣的:使用實體框架選擇DBSet中的行

dbContext.Workers 

我可以得到一個列表如下:

workers = m.Workers.Where(w => w.BranchId == curUser.BranchId).ToList<Worker>(); 

但正如你所看到的,它返回一個List<Worker>,我不能使用像workers.Find(WorkerId)與它的方法。

基本上,我試圖返回基於某些篩選器的DBSet我的意思是我想在DBSet類上使用LINQ。我想要這個,因爲我需要使用workers.Find(WorkerId)也許我需要更新這個模型。所以,我會根據where子句得到一個列表,我將更改一些值並將使用dbContext.SaveChanges()。那可能嗎?

感謝

回答

4

凡(...)返回一個IQueryable,你可以操縱之前查詢運行。 ToList()將強制執行查詢並將這些對象放入內存中。如果你想「發現」的查詢後一個項目,那麼你可以做這樣的事情與你的名單:

workers.SingleOrDerfault(x => x.WorkerId == WorkerId); 

如果他們都在這樣的記憶,並進行更改,那麼你會堅持這些變化調用.SaveChanges()。

但是,如果您需要在查詢命中數據庫之前對您的IQueryable應用更多篩選,那麼您需要在調用ToList()之前操作IQueryable。

+0

所以,即使它是一個IQueryable,當我改變它的一些值,DBSet也得到更新?這似乎很奇怪,同時也很好。我正在嘗試這個,謝謝。 – user5273382

+0

不,雖然它是IQueryable,但您還沒有記錄,您只需從數據庫中獲取它們,應用額外的過濾等等。如果您想要進行的更改持續存在,則必須執行。閱讀關於延期執行的更多信息。 –

+0

謝謝,首先我會嘗試你的解決方案,然後我會閱讀它。 – user5273382