示例#1
0
        public void Execute()
        {
            var t1 = new Team {Name = "Team 1"};
            var t2 = new Team {Name = "Team 2"};

            var p1 = new Person {Name = "gsf_zero1", Team = t1};
            var p2 = new Person {Name = "gsf_zero2", Team = t2};
            var p3 = new Person {Name = "gsf_zero3", Team = t1};

            var teams = new List<Team> {t1, t2};
            var people = new List<Person> {p1, p2, p3};

            //
            // グループ結合する.
            //
            // Join拡張メソッドと書式的にはほとんど同じであるが、以下の点が異なる。
            //  ・resultSelectorの書式が、(TOuter, IEnumerable<TInner>)となっている。
            // これにより、結果をJOINした結果をグルーピングした状態で保持することが出来る。(階層構造を構築出来る。)
            //
            // 以下のクエリ式と同じ事となる。
            //  from team   in teams
            //  join person in people on team equals person.Team into personCollection
            //  select new { Team = team, Persons = personCollection }
            //
            var query = teams.GroupJoin // TOuter
            (
                people, // TInner
                team => team, // TOuterのキー
                person => person.Team, // TInnerのキー
                (team, personCollection) => // 結果 (TOuter, IEnumerable<TInner>)
                        new {Team = team, Persons = personCollection}
            );

            foreach (var item in query)
            {
                Output.WriteLine("TEAM = {0}", item.Team.Name);
                foreach (var p in item.Persons)
                {
                    Output.WriteLine("\tPERSON = {0}", p.Name);
                }
            }
        }
示例#2
0
        public void Execute()
        {
            var t1 = new Team {Name = "Team 1"};
            var t2 = new Team {Name = "Team 2"};

            var p1 = new Person {Name = "gsf_zero1", Team = t1};
            var p2 = new Person {Name = "gsf_zero2", Team = t2};
            var p3 = new Person {Name = "gsf_zero3", Team = t1};

            var teams = new List<Team> {t1, t2};
            var people = new List<Person> {p1, p2, p3};

            //
            // 結合する.
            //
            // 以下のクエリ式と同じ事となる。
            //
            //   from   team   in teams
            //   join   person in people on team equals person.Team
            //   select new { TeamName = team.Name, PersonName = person.Name }
            //
            var query =
                teams.Join // TOuter
                (
                    people, // TInner
                    team => team, // TOuterのキー
                    person => person.Team, // TInnerのキー
                    (team, person) => // 結果
                            new {TeamName = team.Name, PersonName = person.Name}
                );

            foreach (var item in query)
            {
                Output.WriteLine("Team = {0}, Person = {1}", item.TeamName, item.PersonName);
            }
        }