今回は、whereキーワードについてです。
whereキーワードもSQLのそれと同じく、絞り込みを行う為に利用します。
単純に
from x in ListA where x == 1 select x;
したり、通常のif文で指定するように
from x in ListA where x == 1 || x < 0 select x;
とすることも出来ます。
また、複数のwhereで記述する事も出来ます。
from x in ListA where x == 1 where x < 0 select x;
この場合は、強制的にAND条件となります。
以下、サンプルです。
#region LinqSamples-04 public class LinqSamples04 : 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 where person.Name.EndsWith("4") select person; foreach(var person in query1) { Console.WriteLine("QUERY-1: Id={0}, Name={1}", person.Id, person.Name); } // // 複数の条件. // var query2 = from person in persons where person.Name.EndsWith("4") || person.Address.Prefecture == "京都府" select person; foreach(var person in query2) { Console.WriteLine("QUERY-2: Id={0}, Name={1}", person.Id, person.Name); } // // 複数のwhereを指定 // var query3 = from person in persons where person.Name.Contains("gsf") where person.Address.Prefecture == "京都府" select person; foreach(var person in query3) { Console.WriteLine("QUERY-3: Id={0}, Name={1}", person.Id, person.Name); } } } #endregion