2009-05-13 6 views
1

J'ai lu this question mais ce n'est pas exactement ce que je cherchais. Mon problème est que je whant de le faire:LINQ to SQL en utilisant GROUP BY et COUNT avec Date (problème CONVERT)

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) 
résultat

est:

Date  Count 

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

et je fais ceci:

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()} 

que Acoording LINQPad fait cela dans SQL:

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

et le résultat est:

 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 

Donc je comprends que la différence est la partie CONVERSION. Alors, comment puis-je convertir de Date ou Datetime à SmallDate ou quelque chose comme ça dans LINQ?

Merci

Répondre

1

Essayez ceci:

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()} 

Si CreateDate est annulable, alors vous aurez besoin d'utiliser le paramètre de valeur avant d'extraire la date. Vous pouvez également être en mesure d'omettre l'extraction de la date sur la requête WHERE en fonction du sens de la vérification de la date de fin (est-elle inclusive, puis utilisez Date, sinon omettez Date).

+0

Il renvoie 'Date' n'est pas un membre de 'Date?'. mais votre idée Il est à peu près correct – Txugo

+0

Je ne savais pas si c'était nullable ou non (voir mon commentaire). En outre, soyez prudent avec la comparaison de date de fin. La façon dont le vôtre est écrit Je ne pense pas qu'il inclura les articles du 22/5/2009 puisqu'ils sont tous après minuit à cette date. – tvanfosson