MS 101 Linq チュートリアルを使ってコーディングしています。
クエリをラムダ/メソッド構文 (およびその逆) にリファクタリングしようとしています。これは私にとって挑戦です。
指定されたクエリは次のとおりです。
var custSupQuery =
from sup in suppliers
join cust in customers on sup.Country equals cust.Country into cs
select new { Key = sup.Country, Items = cs };
私はこのように書き直しました:
var custSupQuery = suppliers.Join(customers, s => s.Country, c => c.Country, (c, s) => new { Key = s.Country, Items = s, Items2 = c });
( new 句で両方のタイプのフィールドを組み合わせる簡単な方法が見つからなかったので、別々に残しました)。
これは、表示ループに到達するまでコンパイラと一緒に飛ぶようです。2 番目の foreach は型を処理できないようです。
表示コードは次のとおりです (クエリ式では機能しますが、ラムダ/メソッド構文では機能しません)。
foreach (var item in custSupQuery)
{
Console.WriteLine(item.Key + ":");
foreach (var element in item.Items) // <-- error here
{
Console.WriteLine(" " + element.CompanyName);
}
}
エラーは次のとおりです。
「JoinOperators.Program.Customer」には「GetEnumerator」のパブリック定義が含まれていないため、foreach ステートメントは「JoinOperators.Program.Customer」型の変数を操作できません
呼び出しでラムダ/クエリ構文を終了しようとしましたAsEnumerable()
が、それでも同じエラーが発生します。匿名であるため、型として何を使用できるかわかりAsEnumerator<type_goes_here>
ません。呼び出すことができるオブジェクトがないようですGetType()
。
助言がありますか?