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. Так почему же это не ясно для компилятора?
Ответы
Ответ 1
Тип, возвращаемый делегатом, который вы передаете на SelectMany
, должен быть IEnumerable<TResult>
, но, очевидно, Office
не реализует этот интерфейс. Похоже, вы просто путали SelectMany
для простого метода Select
.
-
SelectMany
предназначен для сглаживания нескольких наборов в новый набор.
-
Select
предназначен для взаимного сопоставления каждого элемента в исходном наборе с новым набором.
Я думаю, что это то, что вы хотите:
foreach (var office in CurrentEmployee.EmployeeOffices.Select(eo => eo.Office))