2014-06-14 36 views
0

因此,互聯網一直告訴我,爲了創建一個Linq to Entities查詢返回一堆對象(例如元組),該查詢必須實際分爲客戶端和服務器步驟(Linq to Entities和Linq to Objects)。關於使代碼更易於維護。例如,Linq to Entities無參數構造函數需求遺留潛在的懶查詢

(
     from table 
     select Tuple.Create(a, b) 
    ); 

是非法的,而且必須確實,當我們調用ToList(),在查詢運行,完全列舉,造成巨大潛力寫成

(
     from table 
     select new {A=a, B=b} 
    ).ToList().Select(row => Tuple.Create(row.A, row.B)); 

然而,延遲加載。我意識到你可以用具有可設置屬性的類來繞過這個問題,但是不應該重複的系統類或者構造函數中具有複雜邏輯的自定義類呢?有沒有任何簡單的方法來規避這個限制,以便對象的創建可以排隊,只有在IQueryable集合被枚舉時才能執行?

隨時讓我知道,如果我試圖做的事情也表明一個「差」的設計,但它會很高興知道這是否至少有可能。提前致謝!

回答

0

元組是關閉情況,因爲它沒有可以設置的構造函數或字段。

如果你創建自己的對象,你可以使用字段初始化爲你所期望的:

from table 
select new MyTuple() { A = a, B = b }; 

我不知道它,但它看起來像實體只是不承認一個函數調用一種創作方法。

+0

當我寫一個查詢,就像你給的第一個例子,我得到了下面的運行時異常:「LINQ to Entities只支持無參數的構造函數和初始化器」 – ztforster

+0

我的不好。我認爲例子一是有效的。好吧,但我知道兩個例子。 –

+0

出於好奇,您使用的是什麼版本的實體? –

相關問題