Exemple #1
0
        public void Test()
        {
            EFServiceProvider.RunInContext(context =>
            {
                // Quarterly count of booked items in 2012 and 2013.
                //
                //SELECT   YEAR(StartTime) AS [Year],
                //         SUM(CASE WHEN DATEPART(QUARTER, StartTime) = 1 THEN 1 ELSE 0 END) AS FirstQuarter,
                //         SUM(CASE WHEN DATEPART(QUARTER, StartTime) = 2 THEN 1 ELSE 0 END) AS SecondQuarter,
                //         SUM(CASE WHEN DATEPART(QUARTER, StartTime) = 3 THEN 1 ELSE 0 END) AS ThirdQuarter,
                //         SUM(CASE WHEN DATEPART(QUARTER, StartTime) = 4 THEN 1 ELSE 0 END) AS ForthQuarter
                //FROM     Bookings
                //WHERE    YEAR(StartTime) BETWEEN 2012 AND 2013
                //GROUP BY YEAR(StartTime);

                var quarterlyCountOfBookedItems = context.Bookings
                                                  .Select(booking => new
                {
                    booking.StartTime.Year,
                    Quarter = SqlDbFunctionsExtensions.SqlDatePart(SqlDatePart.Quarter, booking.StartTime)
                })
                                                  .Where(result => result.Year >= 2012 && result.Year <= 2013)
                                                  .GroupBy(result => new
                {
                    result.Year
                })
                                                  .Select(group => new
                {
                    group.Key.Year,
                    FirstQuarter  = group.Sum(result => result.Quarter == 1 ? 1 : 0),
                    SecondQuarter = group.Sum(result => result.Quarter == 2 ? 1 : 0),
                    ThirdQuarter  = group.Sum(result => result.Quarter == 3 ? 1 : 0),
                    ForthQuarter  = group.Sum(result => result.Quarter == 4 ? 1 : 0),
                })
                                                  .OrderBy(result => result.Year)
                                                  .ToList();

                /*
                 *  SELECT  DATEPART(year, [b].[StartTime]) AS [Year],
                 *          SUM(CASE WHEN DATEPART(Quarter, [b].[StartTime]) = 1 THEN 1 ELSE 0 END) AS [FirstQuarter],
                 *          SUM(CASE WHEN DATEPART(Quarter, [b].[StartTime]) = 2 THEN 1 ELSE 0 END) AS [SecondQuarter],
                 *          SUM(CASE WHEN DATEPART(Quarter, [b].[StartTime]) = 3 THEN 1 ELSE 0 END) AS [ThirdQuarter],
                 *          SUM(CASE WHEN DATEPART(Quarter, [b].[StartTime]) = 4 THEN 1 ELSE 0 END) AS [ForthQuarter]
                 *  FROM     [Bookings] AS [b]
                 *  WHERE    (DATEPART(year, [b].[StartTime]) >= 2012)
                 *          AND (DATEPART(year, [b].[StartTime]) <= 2013)
                 *  GROUP BY DATEPART(year, [b].[StartTime])
                 *  ORDER BY DATEPART(year, [b].[StartTime]);
                 */

                var expectedResult = new[]
                {
                    new { Year = 2012, FirstQuarter = 0, SecondQuarter = 0, ThirdQuarter = 4043, ForthQuarter = 0 },
                    new { Year = 2013, FirstQuarter = 1, SecondQuarter = 0, ThirdQuarter = 0, ForthQuarter = 0 }
                };

                quarterlyCountOfBookedItems.Should().BeEquivalentTo(expectedResult);
            });
        }