読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET 絡みのメモを公開しています。

Linq入門記-04 (クエリキーワード, クエリ構文, where)

C# Linq


今回は、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