Tsql linq到sql将日期合并到组中
我有一个简单的sql查询,如下所示:Tsql linq到sql将日期合并到组中,tsql,sql-server-2005,linq-to-sql,Tsql,Sql Server 2005,Linq To Sql,我有一个简单的sql查询,如下所示: SELECT dt AS 'startDate' , dt AS 'endDate' FROM WorkCalendar WHERE dt BETWEEN dateadd(yy, datediff(yy, 0, getdate()), 0) AND dateadd(MILLISECOND, -3, dateadd(YEAR, datediff(YEAR, 0, getdate()) + 1, 0)) AND isWorkDay
SELECT dt AS 'startDate'
, dt AS 'endDate'
FROM
WorkCalendar
WHERE
dt BETWEEN dateadd(yy, datediff(yy, 0, getdate()), 0) AND dateadd(MILLISECOND, -3, dateadd(YEAR, datediff(YEAR, 0, getdate()) + 1, 0))
AND isWorkDay = 0
这将返回“我的表”中的所有日期,其中包含当前年度的空闲天数
这是示例输出:
startDate endDate
2012-01-01 00:00:00 2012-01-01 00:00:00
2012-01-06 00:00:00 2012-01-06 00:00:00
2012-01-07 00:00:00 2012-01-07 00:00:00
2012-01-08 00:00:00 2012-01-08 00:00:00
2012-01-14 00:00:00 2012-01-14 00:00:00
2012-01-15 00:00:00 2012-01-15 00:00:00
2012-01-21 00:00:00 2012-01-21 00:00:00
2012-01-22 00:00:00 2012-01-22 00:00:00
我想做的是将临近日期分组如下:
startDate endDate
2012-01-01 00:00:00 2012-01-01 00:00:00
2012-01-06 00:00:00 2012-01-08 00:00:00
2012-01-14 00:00:00 2012-01-15 00:00:00
2012-01-21 00:00:00 2012-01-22 00:00:00
如果我有两天或两天以上的时间,我想加入他们的小组
我希望使用linq to sql完成这项工作,因为在webservice中使用它会更简单,但简单的sql可以做到这一点:)得到如下结果:
WITH d (d1)
AS (SELECT dt
FROM workcalendar
WHERE dt BETWEEN Dateadd(yy, Datediff(yy, 0, Getdate()), 0) AND
Dateadd(millisecond, -3,
Dateadd(year, Datediff(year,
0,
Getdate()) + 1
, 0))
AND isworkday = 0)
SELECT Z1.d1 AS startDate,
Z2.d1 AS endDate
FROM (SELECT Row_number()
OVER (
ORDER BY A.d1) AS 'ID',
A.d1
FROM d AS A
WHERE NOT EXISTS (SELECT *
FROM d AS C
WHERE A.d1 = Dateadd(d, 1, C.d1))) AS Z1,
(SELECT Row_number()
OVER (
ORDER BY A.d1) AS 'ID',
A.d1
FROM d AS A
WHERE NOT EXISTS (SELECT *
FROM d AS C
WHERE A.d1 = Dateadd(d, -1, C.d1))) AS Z2
WHERE Z1.id = Z2.id
但是欢迎任何评论和优化:)您已经尝试过了什么?现在我正在使用第一部分,但我尝试过构建递归查询,但我已经停止了我的服务器在endDate+1=startDate进行连接:/能否向我们展示LINQ到SQL查询您已经编写了?我只有SQL查询。我以为您正在寻找LINQ to SQL来表达这一点?是的,但不知道如何转换:/