2013-05-30 54 views
2

我正在爲一個asp.net頁面的工作報告,我試圖將這個linq語句的結果分配給一個現有的數據集,但我收到「在這種情況下只支持原始類型或枚舉類型。 「錯誤信息。以下是我的代碼:錯誤消息:「在此上下文中僅支持基元類型或枚舉類型。」

var contextTable = new dbpersonnelEntities();     
    var contextHistory = new WriterInResidenceEntities(); 

    var rslt = (from c in contextTable.TableofOrganizationRpts 
      where !(from o in contextHistory.emp_history 
      select o.employeeID).Contains((int)c.employeeid_fk) 
         select c).ToList(); 

    ReportDataSource r = new ReportDataSource("tableOfOrgDS", rslt); 
+1

'dbpersonnelEntities'和'WriterInResidenceEntities'是兩種不同的類型,派生自ObjectContext(或'DbContext')嗎? – Dennis

+0

@丹尼斯是的,他們是從兩個不同的實體模型中派生出來的兩種不同的類型。我試圖簡單列出TableofOrganizationRpts表中emp_history表中不存在的所有員工。如果我嘗試在代碼中使用單個對象上下文,它會起作用,但是當我嘗試執行此連接時出現錯誤。 – Guillermo

回答

0

您不能在單個LINQ查詢中混合來自不同上下文的實體類型。要麼把它們放到一個上下文,或者嘗試執行此:

var employeeIds = (from o in contextHistory.emp_history select o.employeeID).ToList(); 

,然後通過這個列表進入第二查詢:

var rslt = (from c in contextTable.TableofOrganizationRpts 
      where !employeeIds.Contains((int)c.employeeid_fk) 
      select c).ToList(); 

這應該產生結果的SQL查詢IN條件。請注意,這可能工作緩慢。

+0

這工作完美無瑕!這是一個相當短的名單,所以幾乎沒有任何延遲。非常感謝你!!我是新來的實體框架,我現在知道如何正確地處理多個實體類型。 – Guillermo

相關問題