2009-05-13 3 views
1

this question을 읽었지만 찾고있는 것이 아닙니다.GROUP BY와 COUNT를 날짜와 함께 사용하는 LINQ to SQL

Date  Count 

02/03/2009 4 
24/02/2009 3 
25/02/2009 3 
26/02/2009 3 

내가이 일을 해요 : :

SELECT CONVERT(varchar(10), m.CreateDate, 103) as [Date] , count(*) as [Count] FROM MEMBERS as m 
WHERE m.CreateDate >= '24/01/2008' and m.CreateDate <= '26/06/2009' 
Group by CONVERT(varchar(10), m.CreateDate, 103) 

결과는 다음과 같습니다 내 문제는 내가이 일을 whant입니다

From m In Me.Members _ 
Where m.CreateDate >= "22/02/2008" And m.CreateDate <= "22/05/2009" _ 
Group m By m.CreateDate Into g = Group _ 
Select New With {CreateDate, .Count = g.Count()} 

LINQPad에 acoording하는 SQL이 수행한다 :

SELECT COUNT(*) AS [Count], [t0].[CreateDate] 
FROM [Members] AS [t0] 
WHERE ([t0].[CreateDate] >= @p0) AND ([t0].[CreateDate] <= @p1) 
GROUP BY [t0].[CreateDate] 

및 결과는 다음과 같습니다.

 Date   Count 
24/02/2009 00:00:00 1 
24/02/2009 07:07:10 1 
24/02/2009 12:24:10 1 
25/02/2009 03:43:05 1 
25/02/2009 03:48:36 1 
25/02/2009 04:25:11 1 
26/02/2009 01:51:24 1 
26/02/2009 09:54:55 1 
26/02/2009 09:55:31 1 
02/03/2009 05:29:22 1 
02/03/2009 05:45:50 1 
02/03/2009 06:15:31 1 
02/03/2009 06:59:07 1 

그래서 나는 다른 부분이 CONVERT 부분이라는 것을 압니다. 그렇다면 어떻게 LINQ에서 Date 또는 Datetime을 SmallDate 또는 그와 비슷한 것으로 변환 할 수 있습니까?

답변

1

이 시도

감사 :

From m In Me.Members _ 
Where m.CreateDate.Date >= new DateTime(2009, 2, 22) And m.CreateDate.Date <= new DateTime(2009, 5, 22) _ 
Group m By day = m.CreateDate.Date Into g = Group _ 
Select New With { .Date = day.ToString("dd/MM/yyyy"), .Count = g.Count()} 

CreateDate에 널 (NULL) 인 경우, 당신은 날짜를 추출하기 전에 값 매개 변수를 사용해야합니다. 또한 종료 날짜 검사의 의미에 따라 WHERE 쿼리에서 Date의 추출을 생략 할 수도 있습니다 (포괄적이며 Date를 사용하고 Date를 생략).

+0

'Date'가 'Date?'의 구성원이 아닙니다. 하지만 당신의 생각은 맞습니다. – Txugo

+0

nullable인지 아닌지 확실하지 않았습니다. (제 의견을 참조하십시오). 또한 종료일 비교에주의하십시오. 당신의 방식이 쓰여지는 방식으로 나는 그 날 자정 이후로 22/5/2009의 항목을 포함 할 것이라고 생각하지 않습니다. – tvanfosson