1

先週と 2 週間前の日曜日から土曜日までの日付範囲を取得しようとしているので、今日は 2012 年 10 月 24 日、日付範囲は : 2012 年 10 月 21 日 - 2012 年 10 月 27 日です。

先週の日付範囲を取得しようとしています: 10/14/2012 - 10/20/2012
また、2 週間前の日付範囲: 10/07/2012 - 10/13/2012

私は正しいSQLクエリを持っています

DECLARE @TodayDayOfWeek INT
DECLARE @EndOfPrevWeek DateTime
DECLARE @StartOfPrevWeek DateTime
DECLARE @EndOf2WeeksAgo DateTime
DECLARE @Start2WeeksAgo DateTime


SET @TodayDayOfWeek = datepart(dw, GetDate())
--get the last day of the previous week (last Sunday)
SET @EndOfPrevWeek = DATEADD(dd, -@TodayDayOfWeek, GetDate())
--get the first day of the previous week (the Monday before last)
SET @StartOfPrevWeek = DATEADD(dd, -(@TodayDayOfWeek+6), GetDate())
SET @EndOf2WeeksAgo = DATEADD(dd, -(@TodayDayOfWeek+7), GetDate())
SET @Start2WeeksAgo = DATEADD(dd, -(@TodayDayOfWeek+13), GetDate())

Select  @StartOfPrevWeek as [Last week start date], @EndOfPrevWeek as [Last Week start date],
@Start2WeeksAgo as [2 Weeks Ago Start], @EndOf2WeeksAgo as [2 Weeks Ago End]    

これにより、

[Last week start date] [Last week start date]  [2 Weeks Ago Start] [2 Weeks Ago End] 
10/14/2012             10/20/2012              10/07/2012          10/13/2012

これをLinqに変換するにはどうすればよいですか? 日付列があり、これらの 2 つの日付範囲の間の日付を次のように表示する必要があります

last week date   2 weeks ago
10/15/2012        10/08/2012
10/18/2012        10/11/2012
4

1 に答える 1

0

以下は、私が作成した簡単なコンソール アプリで、タスクを達成する 1 つの方法を示しています。ニーズに合わせて調整するだけです...

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Test> testData = new List<Test>() {
                new Test() { Id = 1, Date = DateTime.Now.AddDays(-9) },
                new Test() { Id = 2, Date = DateTime.Now.AddDays(-8) },
                new Test() { Id = 3, Date = DateTime.Now.AddDays(-16) },
                new Test() { Id = 4, Date = DateTime.Now.AddDays(-14) },
                new Test() { Id = 5, Date = DateTime.Now.AddDays(-15) },
                new Test() { Id = 6, Date = DateTime.Now.AddDays(-10) },
                new Test() { Id = 7, Date = DateTime.Now.AddDays(-7) }
            };

              DateTime date = DateTime.Now; // 10/24/2012

              DateTime startOneWeekAgo =
                  // prev Sunday 10/14/2012 00:00
                  date.AddDays(-7).Date.AddDays(-(int)date.DayOfWeek),

                  // next Sunday 10/21/2012 00:00
                  endOneWeekAgo = startOneWeekAgo.AddDays(7);

              DateTime startTwoWeeksAgo =
                  // prev Sunday 10/07/2012 00:00
                  startOneWeekAgo.AddDays(-7),

                  // next Sunday 10/14/2012 00:00
                  endTwoWeeksAgo = endOneWeekAgo.AddDays(-7);

            var qryOneWeekAgo =
                            from record in testData
                            where record.Date >= startOneWeekAgo // include start
                            && record.Date < endOneWeekAgo // exclude end
                            select record;

            var qryTwoWeeksAgo =
                             from record in testData
                             where record.Date >= startTwoWeeksAgo // include start
                             && record.Date < endTwoWeeksAgo // exclude end
                             select record;

            Console.WriteLine("------- Dates from 1 Week Ago -------");
            foreach (var record in qryOneWeekAgo)
            {
                Console.WriteLine(
                    string.Format("{0} => {1}", record.Id, record.Date));
            }

            Console.WriteLine();

            Console.WriteLine("------- Dates from 2 Weeks Ago -------");
            foreach (var record in qryTwoWeeksAgo)
            {
                Console.WriteLine(
                    string.Format("{0} => {1}", record.Id, record.Date));
            }

            Console.ReadKey();

        }         
    }

    public class Test
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }
    }

}

出力

------- Dates from 1 Week Ago -------
1 => 10/15/2012 12:52:38 PM
2 => 10/16/2012 12:52:38 PM
6 => 10/14/2012 12:52:38 PM
7 => 10/17/2012 12:52:38 PM

------- Dates from 2 Weeks Ago -------
3 => 10/8/2012 12:52:38 PM
4 => 10/10/2012 12:52:38 PM
5 => 10/9/2012 12:52:38 PM
于 2012-10-24T14:34:16.037 に答える