簡體   English   中英

將多表LINQ查詢作為一個對象返回

[英]Returning a multiple table LINQ query as one object

因此,對於我當前的應用程序,我需要使用返回單個對象的存儲庫來查詢數據庫。 問題是信息被分成兩個不同的表。 我試圖獲取的對象是一個Rule對象。 規則類由以下數據庫實體組成:

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

在我的存儲庫中,我使用以下查詢來獲取相關信息:

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作為“規則”對象返回,如果我將“var”更改為規則,則會收到以下錯誤:

錯誤10無法將類型'System.Linq.IQueryable'隱式轉換為'TestRules.Rule'。 存在顯式轉換(您是否錯過了演員?)

我可以將System.Linq.IQueryable強制轉換為TestRules.Rule嗎?

2)我的表具有一對多的關系,因此查詢應該返回一個ruleDef記錄和多個ruleCode記錄,但是此時我得到多個ruleDef記錄,它們彼此重復存在。 有任何想法嗎?

謝謝

史蒂夫

您必須初始化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

因為您標記了EntityFramework,所以此處有另一個選項可用於分層加載數據。

假設你在兩者之間有導航屬性,例如ruleDefinition上的一個外鍵到一個ruleCodes集合,你應該可以做類似的事情。

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

哪個會返回一個STRATRULEDEFs對象列表,每個對象都有一個加載的STRATCODES集合的屬性。 從這里開始,可以通過手動或通過使用映射插件輕松地映射到替代類。

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

using System.Data.Entity;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM