2013-09-03 37 views
21

Tôi có một bảng Employee và một bảng Office. Chúng được kết hợp trong mối quan hệ nhiều-nhiều qua bảng EmployeeOffices.SelectMany() không thể suy luận loại đối số - Tại sao không?

Tôi muốn có danh sách tất cả các văn phòng mà một nhân viên cụ thể (CurrentEmployee) được liên kết.

Tôi nghĩ tôi có thể làm một cái gì đó như thế này:

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

Nhưng điều này mang lại cho tôi những lỗi:

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.

Tôi hiểu rằng tôi có thể thêm đối số kiểu. Nhưng Intellisense nhận ra rằng eo.Office thuộc loại Office. Vậy tại sao điều này không rõ ràng với trình biên dịch?

Trả lời

33

Loại trả lại bởi đại biểu bạn chuyển đến SelectMany phải là IEnumerable<TResult>, nhưng rõ ràng, Office không triển khai giao diện đó. Có vẻ như bạn vừa nhầm lẫn SelectMany cho phương thức Select đơn giản.

  • SelectMany là để làm phẳng nhiều bộ thành bộ mới.
  • Select dành cho ánh xạ một đối một thành phần trong bộ nguồn thành bộ mới.

Tôi nghĩ rằng đây là những gì bạn muốn:

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

Do'h! Bạn đúng. Mối quan hệ 'EmployeeOffices' <->' Office' là một mối quan hệ một. Tôi đã bối rối bởi mối quan hệ nhiều - nhiều. Cảm ơn! –

Các vấn đề liên quan