Подтвердить что ты не робот

SelectMany() Не может вывести аргумент типа - почему нет?

У меня есть таблица Employee и таблица Office. Они объединены в отношение "многие ко многим" через таблицу EmployeeOffices.

Я хотел бы получить список всех офисов, с которыми связан конкретный сотрудник (CurrentEmployee).

Я думал, что могу сделать что-то вроде этого:

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

Но это дает мне ошибку:

Аргументы типа для метода 'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable, System.Func > )' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.

Я понимаю, что могу добавить аргументы типа. Но Intellisense признает, что eo.Office имеет тип Office. Так почему же это не ясно для компилятора?

4b9b3361

Ответ 1

Тип, возвращаемый делегатом, который вы передаете на SelectMany, должен быть IEnumerable<TResult>, но, очевидно, Office не реализует этот интерфейс. Похоже, вы просто путали SelectMany для простого метода Select.

  • SelectMany предназначен для сглаживания нескольких наборов в новый набор.
  • Select предназначен для взаимного сопоставления каждого элемента в исходном наборе с новым набором.

Я думаю, что это то, что вы хотите:

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