SelectMany () ne peut pas invoquer l’argument de type – Pourquoi pas?

J’ai une table des Employee et une table de Office . Celles-ci sont jointes dans une relation plusieurs à plusieurs via la table EmployeeOffices .

J’aimerais obtenir une liste de tous les bureaux CurrentEmployee un employé particulier ( CurrentEmployee ) est associé.

Je pensais pouvoir faire quelque chose comme ça:

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

Mais cela me donne l’erreur:

Les arguments de type de la méthode ‘System.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable, System.Func>)’ ne peuvent pas être déduits de l’utilisation. Essayez de spécifier explicitement les arguments de type.

Je comprends que je pourrais append des arguments de type. Mais Intellisense reconnaît que eo.Office est de type Office. Alors pourquoi cela n’est-il pas clair pour le compilateur?

Le type renvoyé par le délégué que vous transmettez à SelectMany doit être un IEnumerable , mais il est évident IEnumerable pas cette interface. Il semble que vous ayez simplement confondu SelectMany avec la méthode Select simple.

  • SelectMany sert à aplatir plusieurs ensembles dans un nouvel ensemble.
  • Select est destiné à la correspondance individuelle de chaque élément d’un ensemble source avec un nouvel ensemble.

Je pense que c’est ce que tu veux:

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