LINQ to SQL с использованием GROUP BY и COUNT с датой (проблема CONVERT) - PullRequest
1 голос
/ 13 мая 2009

Я прочитал этот вопрос , но это не совсем то, что я искал. Моя проблема в том, что я хочу сделать это:

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 делает это в 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. Итак, как я могу преобразовать из Date или Datetime в SmallDate или что-то подобное в LINQ?

Спасибо

1 Ответ

1 голос
/ 13 мая 2009

Попробуйте это:

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 перед извлечением Date. Вы также можете опустить извлечение даты в запросе WHERE в зависимости от смысла проверки даты окончания (если она включена, то используйте дату, иначе опустите дату).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...