我正试图从周日到周六获取上周和2周前的日期范围 所以今天是10/24/2012,日期范围是:10/21/2012 - 10/27/2012
我正试图获得上周的日期范围,即: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?我有一个日期列,需要显示这两个日期范围之间的日期,如
last week date 2 weeks ago
10/15/2012 10/08/2012
10/18/2012 10/11/2012
答案 0 :(得分: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