2015-10-05 34 views
0

我想查詢我的實體DbSet並從本地上下文和數據庫中獲取結果。如何查詢DbSet,以便它返回本地和非本地數據

我有這個疑問:

Dim lResults = MyDbContext.MyEntity.Local.Where(Function(x) x.ParentId = lId) 

但這只是給了我從以前加載的元素結果。

我想要這個在本地和非本地數據上運行查詢。 我不想做MyDbContext.MyEntity.Load(),因爲它加載了數據庫中的所有行,在我的情況下可能是成千上萬行。

編輯:

我意識到這樣的事實,我確實做了以下是由於:

Dim lExpression = Function(x) x.ParentId = lId 
Dim lResults = MyDbContext.MyEntity.Where(lExpression).ToList() 

這種方式,表達有點不評估?

EDIT2:

的問題是,我使用的是Func鍵而不是Epxression。 Func不能轉換爲SQL,因此它會檢索整個數據集並對其進行過濾。

+1

爲什麼不'MyDbContext.MyEntity.Where(功能(X)= x.ParentId LID).Load()'? –

+0

'錯誤「負載」不是的成員「System.Collections.Generic.IEnumerable(中myEntity所)」' 雖然一個ToList()的工作,但它從數據庫加載的一切。 – Oszkar

+0

我不明白。 'MyEntity.Where'應該返回'IQueryable'。 –

回答

0

問題是我使用Func而不是Epxression。 Func不能轉換爲SQL,因此它會檢索整個數據集並對其進行過濾。

解決的辦法是:

Dim lExpression As Expression(Of Func(Of MyEntity, Boolean)) = Function(x) x.ParentId = lId 
Dim lResults = MyDbContext.MyEntity.Where(lExpression).ToList()