LINQ学習ノート(05)


Group and Project.
 class CalendarEvent
    {
        public string Title { get; set; }
        public DateTimeOffset StartTime { get; set; }
        public TimeSpan Duration { get; set; }
    }

    class Program
    {

        static void Main(string[] args)
        {

            List<CalendarEvent> events = new List<CalendarEvent>
            {
                new CalendarEvent
                {
                    Title = "Swing Dancing at the South Bank",
                    StartTime = new DateTimeOffset(2009,7,11,15,0,0, TimeSpan.Zero),
                    Duration = TimeSpan.FromHours(4)
                },
                
                new CalendarEvent
                {
                    Title = "Saturday Night Swing",
                    StartTime = new DateTimeOffset(2009, 7, 11, 19, 30, 0, TimeSpan.Zero),
                    Duration = TimeSpan.FromHours(6.5),
                },

                new CalendarEvent
                {
                    Title = "Formula 1 German Grand Prix",
                    StartTime = new DateTimeOffset(2009,7,12,12,19,0, TimeSpan.Zero),
                    Duration = TimeSpan.FromHours(3)
                },

                new CalendarEvent
                {
                    Title = "Swing Dance Picnic",
                    StartTime = new DateTimeOffset(2009,7,12,15,0,0,TimeSpan.Zero),
                    Duration = TimeSpan.FromHours(4)
                },

                new CalendarEvent
                {
                   Title = "Stompin' at the 100 Club",
                   StartTime = new DateTimeOffset(2009,7,13,19,45,0,TimeSpan.Zero),
                   Duration = TimeSpan.FromHours(5)
                }
            };
            var eventsByDay = from ev in events
                              group ev by ev.StartTime.Date;

            foreach (var day in eventsByDay)
            {
                Console.WriteLine("Events for " + day.Key);

                foreach (var item in day)
                {
                    Console.WriteLine(item.Title);
                }
            }

            Console.WriteLine("-----------Projected--------------------------");
            var projected = from ev in events
                            select ev.StartTime + ev.Duration;

            foreach (var item in projected)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("----------Projected with anonymous type---------");
            var projectedAnonymous = from ev in events
                                     select new
                                     {
                                         Title = ev.Title,
                                         StartTime = ev.StartTime,
                                         EndTime = ev.StartTime + ev.Duration
                                     };

            foreach (var item in projectedAnonymous)
            {
                Console.WriteLine("Event {0} strats at {1} and ends at {2}", item.Title, item.StartTime, item.EndTime);
            }
        }
    }