2013-08-07 61 views
0

因此,對於我當前的應用程序,我需要使用返回單個對象的存儲庫查詢數據庫。問題是信息被分成兩個不同的表格。我試圖得到的對象是一個Rule對象。規則類包括以下數據庫實體:將多表LINQ查詢作爲一個對象返回

class Rule 
    { 
     STRATRULEDEF ruleDefinition { get; set; } 
     List<STRATCODE> ruleCodeList { get; set; } 

在我的倉庫IM使用下面的查詢來獲得相關信息:

public void GetRule(int ruleKey) 
     { 
      Rule ruleQuery = from ruleDefinition in AREContext.STRATRULEDEFs 
          from ruleCodes in AREContext.STRATCODES 
          where ruleDefinition.STRATRULEKEY == ruleKey 
            && ruleCodes.STRATRULEKEY == ruleKey 
          select new { ruleDefinition, ruleCodes }; 

所以,我有兩個問題。

1)如何返回ruleQuery回爲一個「規則」的對象,如果我改變「變種」統治我得到以下錯誤:

錯誤10無法隱式轉換類型「System.Linq.IQueryable '到'TestRules.Rule'。存在明確的轉換(您是否缺少演員?)

我可以將System.Linq.IQueryable投射到TestRules.Rule嗎?

2)我的表具有一對多的關係,所以查詢應該返回一個ruleDef記錄和多個ruleCode記錄,但是此刻我得到多個ruleDef記錄,這些記錄存在爲相互重複的記錄。有任何想法嗎?

感謝

史蒂夫

回答

2

你必須初始化Rule對象,你可以使用FirstOrDefault如果你想有一個單獨的對象:

IEnumerable<Rule> rules = from ruleDefinition in AREContext.STRATRULEDEFs 
          from ruleCodes in AREContext.STRATCODES 
          where ruleDefinition.STRATRULEKEY == ruleKey 
          && ruleCodes.STRATRULEKEY == ruleKey 
          select new Rule 
          { 
           ruleDefinition = ruleDefinition, 
           ruleCodeList = ruleCodes.ToList() 
          }; 
Rule firstRule = rules.FirstOrDefault(); // can be null if rules is empty 
+0

試圖您appraoch我有一個類似的錯誤錯誤無法隱式轉換類型 'System.Linq.IQueryable ' 到 'System.Collections.Generic.IEnumerable '。存在明確的轉換(您是否缺少演員?) – Steve2056726

+0

我對實體框架不熟悉。嘗試將AsEnumerable()添加到前兩行以強制使用LINQ to Objects運行。 –

0

因爲你標記的EntityFramework,你這裏有另一種選擇用於分層加載數據。

假設你有兩個之間的導航性能,如ruleDefinition的外鍵ruleCodes的集合,你應該能夠做到像

AREContext.STRATRULEDEFs.Include(s => s.STRATCodes).ToList; 

這將返回到您的列表STRATRULEDEFs對象,每個對象都有一個屬性,用於加載STRATCODES集合。從這裏,映射到替代類可以手動實現,或通過使用映射插件。

請注意,Include是一種擴展方法,因此請務必將以下內容添加到您的文件中。

using System.Data.Entity;