2013-09-03 2 views
21

У меня есть таблица Employee и таблица Office. Они объединены в отношение «многие ко многим» через таблицу EmployeeOffices.SelectMany() Невозможно ввести аргумент типа - почему бы и нет?

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

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

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

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

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.

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

ответ

33

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

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

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

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

Do'h! Ты прав. Отношение 'Office'Offices' <->' Office' является взаимно однозначным. Меня смутило отношение «многие ко многим» в целом. Благодаря! –

Смежные вопросы