2010-09-15 49 views
0
Error 4 Cannot implicitly convert type 
'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<CCE_2009.Data.Person>>' 
to 
'System.Collections.Generic.IEnumerable<CCE_2009.Data.Person>' 

從生成:演員已經殺了我 - ?

var RecoveryManagerQuery = 
    from RM in 
    (
     from REP in e.Results 
     select REP.Organization.Representatives.Select(RM=>RM.Person) 
    ) 
    select RM; 
RecoveryManagers = new ObservableCollection<Person>(RecoveryManagerQuery.ToList()); 

這是爲什麼IEnumberable包埋 - 組織有一個或多個,其中每個代表是關係到一個只有一個人的代表。

我想符合該條件的人員名單.....

argghh ..

[R

+0

冷靜下來,深呼吸。然後你粘貼整個錯誤信息,並給出一些關於e代表的內容,這是LINQ2Objects還是LINQ2SQL? – 2010-09-15 19:00:51

回答

3

外部查詢是多餘的。我們可以通過刪除它說明清楚:

var RecoveryManagerQuery = 
    from REP in e.Results 
    select REP.Organization.Representatives.Select(RM=>RM.Person); 

正如你所看到的,select條款說,對於每一個REP,選擇所有與REP的組織代表有關的人。這意味着RecoveryManagerQuery中的每個元素都將是集合Person對象,而不是個別的對象。要扁平化查詢,以便返回一組Person對象,而不是一集一集Person對象中的:

var RecoveryManagerQuery = 
    from REP in e.Results 
    from orgRep in REP.Organization.Representatives 
    select orgRep.Person; 

編輯:這裏是點符號:

e.Results.SelectMany(
    REP => REP.Organization.Representatives, 
    (REP, orgRep) => orgRep.Person); 
+0

我看你的例子他們只有一個選擇,因此,只有一個集合。你怎麼用點符號來寫這個? var RecoveryManagerQuery = e.Results.Select(P => P.Organization.Representatives.Select(RM => RM.Person));但這也有兩個選擇,併產生相同的錯誤..只是好奇在這個時間點! – codeputer 2010-09-15 19:58:12

+0

我以這種方式工作 - 看起來比我想象的要複雜得多: e.Results.Select(P => P.Organization.Representatives).SelectMany(Reps => Reps.ToArray())。選擇(代表=> Rep.Person); – codeputer 2010-09-15 20:02:25

+0

@codputer:我在我的答案中加了點符號。 – 2010-09-16 02:14:39

0

什麼你想達到什麼目的?由於嵌套的LINQ查詢,您正在獲取IEnumerable的IEnumerable。

取決於你想達到什麼樣的,你可以改變你的查詢:

var RecoveryManagerQuery = 
    from REP in e.Results 
    select REP.Organization.Representatives.Select(RM=>RM.Person); 
+0

我測試了這個,它仍然返回一個IEnumberable中的IEnumerable ...我認爲現在對我來說是有意義的,因爲它們是兩個選擇因此這兩個集合...查看答案以避免雙重選擇 – codeputer 2010-09-15 19:57:15