2014-03-12 48 views
0

我通過LINQ使用Include語句鏈然後在Where中檢索一組記錄。這些記錄存儲在一個表格中,Solicitud de AccionN表格(我將其傳遞給視圖),該表格還有另外三個相關的表格:Analisis Causal,Plan de Accion & Evaluacion Efectividad。無法讀取相關數據LINQ

Where語句要求用戶當前登錄的UserId(ResponsableId)。我要求所有具有UserId的Solicitud de Accion記錄負責。因爲UserId是一個表中的字段,所以我所要做的就是要求它。最重要的是,另外三個表 - Analisis Causal,Plan de Accion & Evaluacion Efectividad - 具有相同的字段UserId(ResponsableId)。

我現在的LINQ表達式爲:

var sacSolicitudAccion = 
    db.SacSolicitudAccion.Include(s => s.SacResponsables) 
         .Include(s => s.SacAnalisisCausal) 
         .Include(s => s.SacPlanesAccion) 
         .Include(s => s.SacEvalEfectividad) 
         .Where(s => s.SacResponsablesID == idUsuario); 

現在真正的問題。我需要向每個Solicitud de Accion顯示當前用戶登錄的用戶對每個Solicitud de Accion負責,其中用戶負責Analisis因果關係,Plan de Accion或Evaluacion Efectividad。

我該怎麼做?

*重要:Solicitud德安信永具有與其他三個表這種關係:

  • Solicitud德安信永有許多更新的時候通知因果和更新的時候通知因果有一個Solicitud德ACCION)和ResponsableId(用戶ID)是一個場在每個表格中,所有表格都是一樣的。

回答

0

最後我解決了這個問題。但我不得不將整個結構重新設計爲ViewModel方法。我走了漫長的路,創建了三個相同類型的集合,SacSolicitudesAccion,但名稱不同。像這樣的東西(在VM):

public ICollection<SacSolicitudAccion> OverdueRequest { get; set; } 
public ICollection<SacSolicitudAccion> OverdueRequestByActionPlan { get; set; } 
public ICollection<SacSolicitudAccion> OverdueRequestByEfectiveness { get; set; } 

我設置保存所有記錄的AsQueryable已變,你可能會認爲它可以帶來一些性能比較問題,但不要低估LINQ的能力和這個框架中,事情非常快。通過這樣做

然後,我在可變閱讀每SacSolicitudAccion,SacPlanesAccion & SacEvaluacion以檢查它們是否過期,並選擇SacSolicitudAccion和綁定,爲各自的視圖模型聲明。將ViewModel傳遞給視圖需要在視圖中進行一些更改,但非常微不足道,而不是foreach(Model中的var項)現在是foreach(Model.Entity中的var項)。就那麼簡單。

然後棘手的部分是管理和重寫過濾器,但這是另一回事。

感謝大家的回答!問候!

-1
.Where(s => s.SacResponsablesID == idusuario || 
      s.SacPlanesAccion.SacResponsablesID == idusuario || 
      s.SacEvalEffectividad.SacResponsablesID == iduario); 

應該是你的Where子句的替代品,得到你所需要的。請注意,您可能並不需要所有這些內容,因爲如果您的應用程序代碼沒有使用它並且上面的內容已轉換爲SQL,則不需要將數據點帶過來。

+0

您如何知道在處理查詢結果時他沒有使用包含的信息?他沒有向查詢結果顯示他正在做什麼。另外,你的「Where」與OP的沒有什麼不同。EF如何處理關係的整個想法是,引用的集合只包含主鍵與給定項目匹配的項目。 – Servy

+0

@Servy:我明確地說過「如果你的應用程序代碼沒有使用它並且上面的代碼被轉換爲SQL」。老實說,這個命名讓我失望了,而且我很難追蹤主鍵,我認爲在某種程度上涉及到非主要關係。 – Guvante

+0

事實上,包含很重要,只是因爲我需要在視圖中顯示相關數據。雖然這個解決方案看起來不錯,當我瀏覽屬性(egsSacPlanesAccion。)它不顯示SacResponsablesID,它只顯示像count,concat,聚合等方法。 我在想如果有一種方法來聲明一個語句,然後「添加」更多行/記錄。那可能嗎?有沒有一種方法呢?我是否需要在我的模型或上下文類中額外添加一些內容,以便可以通過您建議的屬性進行導航? 感謝您的回答! –