今回は、selectキーワードについてです。
selectキーワードもfromキーワードと同じく必ず利用するものです。
基本的にSQLのselectと同じように射影を行います。
主に2つの使い方があります。
- 単純に抽出した結果をそのまま返す
from x in ListA
select x;
- 抽出した結果を基に匿名型の機能を利用して新たな型を作成して返す
from x in ListA select new{.....};
以下サンプルです。
#region LinqSamples-03 public class LinqSamples03 : IExecutable { class Person { public string Id{ get; set; } public string Name{ get; set; } public AddressInfo Address{ get; set;} } class AddressInfo { public string PostCode{ get; set; } public string Prefecture{ get; set; } public string Municipality{ get; set; } public string HouseNumber{ get; set; } public string[] Tel{ get; set; } public string[] Frends{ get; set; } } IEnumerable<Person> CreateSampleData() { return new Person[]{ new Person{ Id="00001" ,Name="gsf_zero1" ,Address=new AddressInfo{ PostCode="999-8888" ,Prefecture="東京都" ,Municipality="どこか1" ,HouseNumber="番地1" ,Tel=new []{"090-xxxx-xxxx"} ,Frends=new string[]{} } } ,new Person{ Id="00002" ,Name="gsf_zero2" ,Address=new AddressInfo{ PostCode="888-7777" ,Prefecture="京都府" ,Municipality="どこか2" ,HouseNumber="番地2" ,Tel=new []{"080-xxxx-xxxx"} ,Frends=new []{"00001"} } } ,new Person{ Id="00003" ,Name="gsf_zero3" ,Address=new AddressInfo{ PostCode="777-6666" ,Prefecture="北海道" ,Municipality="どこか3" ,HouseNumber="番地3" ,Tel=new []{"070-xxxx-xxxx"} ,Frends=new []{"00001", "00002"} } } ,new Person{ Id="00004" ,Name="gsf_zero4" ,Address=new AddressInfo{ PostCode="777-6666" ,Prefecture="北海道" ,Municipality="どこか4" ,HouseNumber="番地4" ,Tel=new []{"060-xxxx-xxxx", "111-111-1111", "222-222-2222"} ,Frends=new []{"00001", "00003"} } } }; } public void Execute() { IEnumerable<Person> persons = CreateSampleData(); // // 抽出したオブジェクトをそのまま返す // var query1 = from person in persons select person; foreach(var person in query1) { Console.WriteLine("Id={0}, Name={1}", person.Id, person.Name); } // // 抽出結果から新たな型を作成する // var query2 = from person in persons select new{ Id=person.Id, Name=person.Name }; foreach(var person in query2) { Console.WriteLine("Id={0}, Name={1}", person.Id, person.Name); } } } #endregion