关于c#:SelectMany()无法推断类型参数 – 为什么不呢?

SelectMany() Cannot Infer Type Argument — Why Not?

我有一张Employee桌和一张Office桌。它们通过EmployeeOffices表连接成多对多关系。

我想得到一个特定员工(CurrentEmployee号)所关联的所有办公室的列表。

我想我可以这样做:

1
2
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类型。那么,为什么编译器不清楚这一点呢?


传递给SelectMany的委托返回的类型必须是IEnumerable,但显然,Office不实现该接口。看起来您只是把SelectMany与简单的Select方法混淆了。

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

我想这就是你想要的:

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