2012-10-24 47 views
1

我試圖從日期到週六獲取上週和2周前的日期範圍 因此今天是2012年10月24日,日期範圍是:2012年10月21日 - 2012年10月27日從T-SQL將datepart轉換爲LINQ

我試圖讓上週的是日期範圍: - 2012年10月14日二○一二年十月二十〇日
另外,2個星期前的是日期範圍: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]  

ŧ他的結果在

[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

顯示這2個日期範圍的日期下面是一個簡單的控制檯應用程序,我寫的,顯示你完成任務的一種方式。只要將它適應您的需求...

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