2013-09-03 12 views
21

Ho un tavolo Employee e un tavolo Office. Questi sono uniti in una relazione molti-a-molti tramite la tabella EmployeeOffices.SelectMany() Impossibile dedurre argomento tipo - Perché no?

Desidero ottenere un elenco di tutti gli uffici a cui è associato un determinato dipendente (CurrentEmployee).

ho pensato che avrei potuto fare qualcosa di simile:

foreach (var office in CurrentEmployee.EmployeeOffices.SelectMany(eo => eo.Office)) 
    ; 

Ma questo mi dà l'errore:

The type arguments for method 'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable, System.Func>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

ho capito che potrei aggiungere argomenti di tipo. Ma Intellisense riconosce che eo.Office è di tipo Office. Quindi, perché non è chiaro al compilatore?

risposta

33

Il tipo restituito dal delegato passato a SelectMany deve essere un IEnumerable<TResult>, ma evidentemente, Office non implementa tale interfaccia. Sembra che tu abbia semplicemente confuso lo SelectMany per il metodo semplice Select.

  • SelectMany è per l'appiattimento di più serie in un nuovo set.
  • Select è per la mappatura uno-a-uno ogni elemento in un'origine impostata su un nuovo set.

penso che questo è ciò che si vuole:

foreach (var office in CurrentEmployee.EmployeeOffices.Select(eo => eo.Office)) 
+0

Do'h! Hai ragione. La relazione 'OfficeDeadeeOffices' <->' Office' è un uno-a-uno. Ero confuso dalla relazione molti-a-molti in generale. Grazie! –

Problemi correlati