2015-11-03 102 views
0

我正在做一個與linq和實體框架的查詢。我正在使用的數據庫是Oracle。下面是代碼:與實體框架的Linq查詢不會產生結果

Entities bdd = contextWrapper.GetContext(); 

data = (from table in bdd.COP_PRDTICSOURES 
     where (table.IDTTIC==ticketId && table.IDTPRD==productId) 
     select table).AsEnumerable(); 

當我看着變量bdd.COP_PRDTIC_SOURES使用調試器,它包含了匹配我的兩個標準的條目。但是,執行查詢後,data變量不包含任何結果。

我的語法有什麼問題嗎?

一些額外的信息:

  • 我在找我執行此查詢未在數據庫COMMITED實體。它是在同一個事務中創建的。
  • 我對後面的數據使用了一個foreach,所以它不是延遲加載的問題。
+0

這也可能有所幫助。 http://stackoverflow.com/a/32936340/4767498 –

+0

什麼代碼訪問'data',一個'foreach'? –

+0

Linq使用懶惰查詢,這意味着你在數據中有什麼不是數據,而是將獲取數據的查詢。如果你做了另一個linq查詢,它會將條件添加到查詢中而不是檢索數據。這不會發生,直到你訪問查詢的內容,通過調用枚舉這是通過foreach,ToArray,ToList,第一等完成 – MikeT

回答

2

AsEnumerable不從數據庫加載數據。調用它你並沒有執行實際的查詢,只是改變它將如何被完整執行。使用ToArrayToList而不是顯式加載數據。或致電foreach這個集合。

+0

我稍後在相同的事務中調用foreach(在同一個事務中)。除此之外,我認爲這正是調試器在查看枚舉時的功能。 – Kaidjin

+0

@Kaidjin當你只是'watch'數據調試器沒有顯示你的數據,因爲它沒有加載。您必須加載數據 – Backs

+0

@Back實際上,在Visual Studio中,您可以在調試器窗口中刷新變量的數據,然後執行與調用「ToList()」時相同的操作。 –