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>)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

型引数を追加できることを理解しています。eo.Officeしかし、Intellisense はそれが Office のタイプであると認識します。では、なぜこれがコンパイラーにとって明確でないのでしょうか?

4

1 に答える 1

60

渡すデリゲートによって返される型は であるSelectMany必要がありますがIEnumerable<TResult>、明らかにOfficeそのインターフェイスを実装していません。SelectManyシンプルなSelect方法と混同しているようです。

  • SelectMany複数のセットを新しいセットにフラット化するためのものです。
  • Selectソース セット内の各要素を新しいセットに 1 対 1 でマッピングするためのものです。

これがあなたが望むものだと思います:

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