public void Execute() { var persons = new Persons { new Person { Id = 1, Name = "gsf_zero1" }, new Person { Id = 2, Name = "gsf_zero2" }, new Person { Id = 3, Name = "gsf_zero3" } }; // // PersonExtensionが定義されているので // そのまま実行すると、Whereの部分にてPersonExtension.Whereが // 呼ばれる. // Output.WriteLine("===== 拡張メソッドを定義した状態でそのままクエリ実行 ====="); var query = from aPerson in persons where aPerson.Id == 2 select aPerson; foreach (var aPerson in query) { Output.WriteLine(aPerson); } // // AsEnumerableメソッドを利用して、PersonsをIEnumerable<Person>に // 変換すると、カスタムWhere拡張メソッドは呼ばれない。 // Output.WriteLine("===== AsEnumerableメソッドを利用してから、クエリ実行 ====="); var query2 = from aPerson in persons.AsEnumerable() where aPerson.Id == 2 select aPerson; foreach (var aPerson in query2) { Output.WriteLine(aPerson); } }
public void Execute() { var persons = new Persons { new Person {Id = 1, Name = "gsf_zero1"}, new Person {Id = 2, Name = "gsf_zero2"}, new Person {Id = 3, Name = "gsf_zero3"} }; // // PersonExtensionが定義されているので // そのまま実行すると、Whereの部分にてPersonExtension.Whereが // 呼ばれる. // Output.WriteLine("===== 拡張メソッドを定義した状態でそのままクエリ実行 ====="); var query = from aPerson in persons where aPerson.Id == 2 select aPerson; foreach (var aPerson in query) { Output.WriteLine(aPerson); } // // AsEnumerableメソッドを利用して、PersonsをIEnumerable<Person>に // 変換すると、カスタムWhere拡張メソッドは呼ばれない。 // Output.WriteLine("===== AsEnumerableメソッドを利用してから、クエリ実行 ====="); var query2 = from aPerson in persons.AsEnumerable() where aPerson.Id == 2 select aPerson; foreach (var aPerson in query2) { Output.WriteLine(aPerson); } }