Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql linq到sql将日期合并到组中_Tsql_Sql Server 2005_Linq To Sql - Fatal编程技术网

Tsql linq到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

我有一个简单的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 = 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来表达这一点?是的,但不知道如何转换:/