2012-06-25 45 views
2

選擇我使用EF 4LINQ與IEnumerable的

我有一個IEnumerable<Type01>其中每個項目(的Type01)都有一個IEnumerable<Type02>

這可以解釋:

Type01 objType01 = ...; 
IEnumerable<Type02> en = objType01.allObjType02; 

我需要做的(使用LINQ)一個選擇,讓我一個IEnumerable<Type01>的結果,但「記錄計數」必須是相同的「記錄數的總和「所有Type02項目。

例如。對於這個列表:

myItem01a 
    myItem02a 
    myItem02b 
myItem01b 
    myItem02c 
    myItem02d 
    myItem02e 

的選擇回報必須是:

myItem01a 
myItem01a 
myItem01b 
myItem01b 
myItem01b 

我知道如何利用老同學SQL(JOIN子句)來做到這一點。但我對LINQ表達式相當陌生。 怎麼辦?

+0

你爲什麼要這麼做? – cadrell0

+0

當我將IEnumerables作爲DataSources傳遞時,我遇到了FastReport.net的一些問題。當試圖讀取帶有子對象的「複雜」結構時,FastReport失敗。它唯一的工作方式(對我而言)是使用「簡單」結構,就好像它是一個數據庫表。 –

回答

6

作弊。使用SelectMany(或等值多個from S)遍歷所有Type02 S,但只得到Type01一輪每次:

var repeatedType01s = 
    from t01 in enumerableOfType01s 
    from t02 in t01.allObjType02 
    select t01; 

現在repeatedType01sIEnumerable<Type01>你想要的基數。

+0

我的't01.allObjType02'給了我一個**對象引用沒有設置爲一個對象的實例**錯誤。它發生是因爲'allObjType02'是'Null',但是當一個「正常的」LINQ選擇並使用foreach迭代時,我的'allObjType02'屬性有一個值。錯誤在哪裏?我正在使用EF4。謝謝。 –

+0

我想我知道發生了什麼事。有時我的't01.allObjType02'是'null'。它正在破壞我的代碼。有沒有辦法可以「顯示」該項目時,該屬性爲空?這就像SQL語句的LEFT JOIN。 –

+0

我想我通過在where子句後面加上第二個'from'來解決它。謝謝。 ;) –