SelectMany()无法推断类型参数 - 为什么不呢?

时间:2013-09-03 23:14:41

标签: c# entity-framework linq

我有一个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 个答案:

答案 0 :(得分:40)

您传递给SelectMany的代理返回的类型必须是IEnumerable<TResult>,但很明显,Office未实现该接口。看起来您只是简单地将SelectMany与简单Select方法混淆了。

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

我认为这就是你想要的:

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