2011-09-04 80 views
0

我有出現語法正確以下select語句:如何使用LINQ/Linq2E返回具體類型的新對象?

var accounts = from i in db.IRSBASEFLs 
          join vr in db.VSARules on i.VSACode equals vr.VSACode into rules 
          from rule in rules.DefaultIfEmpty() 
          select new ImporterAccount(i, rule, RuleType.Liquidity); 

然而,這將引發:我已經嘗試添加一個「建設者」類返回一個新的ImporterAccount

Only parameterless constructors and initializers are supported in LINQ to Entities. 

,但這太失敗了,這次使用:

LINQ to Entities does not recognize the method 'IrsalDAL.ImporterAccount CreateImporterAccount(IrsalDAL.IRSBASEFL, IrsalDAL.VSARule, IrsalUtilities.RuleType)' method, and this method cannot be translated into a store expression. 

我需要進行計算,最好是在構造函數中,所以我以一個有點困惑如何實現這一目標?

爲什麼當類不是我的實體模型的一部分時,會拋出一個L2E異常?

如何返回一個新對象並對其進行計算?

回答

0

我不知道解決你的問題是什麼,但你可以解決它是這樣:

var tempAccounts = from i in db.IRSBASEFLs 
        join vr in db.VSARules on i.VSACode equals vr.VSACode into rules 
        from rule in rules.DefaultIfEmpty() 
        select new { VarI = i, Rule = rule, Liquidity = RuleType.Liquidity}; 

var accounts = tempAccounts.Select(x => new ImporterAccount(x.VarI, x.rule, x.Liquidity)); 

希望它能幫助:)

編輯1: 關於「關閉現有的數據讀取器錯誤「,A google search returns many results,第一個是SO question。接受的答案是:

這不是關於關閉連接。 EF正確管理連接。 我的這個問題的理解是,有多個數據,同時第一 一個已完成的讀取之前執行下一個的DataReader 檢索命令上單個連接(或單個命令 具有多個選擇)執行。避免異常的唯一方法是 以允許多個嵌套的DataReaders =打開 MultipleActiveResultSets。當迭代查詢結果(IQueryable)時,總是發生這種情況的另一個場景是 ,您將在迭代中觸發延遲加載以加載實體。

+0

謝謝,但是我得到「已經有一個打開的DataReader與此命令關聯,必須先關閉」? – BlueChippy

+0

這似乎是一個單獨的問題。我編輯了我的答案,並提供了一個可能的解決方案的鏈接。 –

+0

收到你的答案,雖然我實際上首先將所有內容都返回到anonymouse類型,然後從中選擇以解決第二個問題(這是延遲加載和多個結果集) – BlueChippy