2012-10-24 5 views
1

지난 주 및 2 주 전에 일요일부터 토요일까지 의 기간을 가져 오려고합니다. 오늘 오늘 날짜는 10/24/2012이며, 날짜 범위는 10/21/2012입니다. - 10/27/2012T-SQL에서 datepart를 LINQ로 변환

2012 년 10 월 14 일 - 10/20/2012
지난 주 날짜 범위도 다음과 같습니다 : 10/07/2012 - 2012년 10월 13일

내가는 올바른 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, [email protected], 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]  

T 그의 결과는

[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로 변환합니까? 나는 날짜 열이 있고 난 그 당신에게 작업을 달성 한 가지 방법을 보여줍니다 쓴 간단한 콘솔 응용 프로그램입니다 다음

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

답변

0

처럼이 두 기간 사이의 날짜를 표시해야합니다. 그냥

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