38

我有一张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 类型的。那么为什么编译器不清楚呢?

4

1 回答 1

60

您传递给的委托返回的类型SelectMany必须是 a IEnumerable<TResult>,但显然Office没有实现该接口。看起来您只是SelectMany对简单的Select方法感到困惑。

  • SelectMany用于将多个集合展平为一个新集合。
  • Select用于将源集中的每个元素一对一映射到新集。

我认为这就是你想要的:

foreach (var office in CurrentEmployee.EmployeeOffices.Select(eo => eo.Office))
于 2013-09-03T23:23:51.413 回答