2009-05-13 21 views
1

私はthis questionを読みましたが、それは私が探していたものではありません。 私の問題は、私はこれを行うにwhantです:日付とGROUP BYとCOUNTを使用するLINQ to SQL

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) 

結果は次のとおりです。

Date  Count 

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

と私はこれをやっている:

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 

したがって、diferenceはCONVERT部分です。ですから、DateやDatetimeからLINQのような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可能である場合、あなたは日付を抽出する前に、Valueパラメータを使用する必要があります。また、終了日のチェックの感覚に応じて、WHEREクエリで日付の抽出を省略することもできます(それを含めて、Dateを使用し、それ以外の場合はDateを省略します)。

+0

「Date」は「Date?」のメンバーではありません。あなたのアイデアそれは右の約 – Txugo

+0

私はそれがnullableかどうか分からなかった(私のコメントを参照してください)。また、終了日の比較にも注意してください。あなたの書かれたやり方は、その日の真夜中を過ぎてから22/5/2009のアイテムが含まれているとは思いません。 – tvanfosson