Я создал и протестировал мой MS SQL-скрипт, который отлично работает. Я медленно перешел на LINQ, и у меня возникли проблемы с преобразованием моего скрипта в VB.Net и LINQ.Как преобразовать этот SQL-скрипт в LINQ? И сохранить граф()?
SELECT DATEPART(dd,Generated) AS Day, count(ID) as Total
FROM Alarm
WHERE Generated >=CONVERT(VARCHAR(10),DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0),120)
GROUP BY DATEPART(dd,Generated)
В принципе, я прошу таблицу дать мне общее количество строк за месяц, сгруппированный в день. Было бы замечательно, если бы он разместил 0 для будущих дней месяца. Любые советы о том, как конвертировать count в LINQ, будут отличными.
Мой код:
Dim ChartData = (From a In db.Alarms _
Where a.Generated >= FirstDayOfMonth(DateTimeNow) And a.Generated <= LastDayOfMonth(DateTimeNow) _
Group By Day = a.Generated Into Grp = Group, Count() _
Select Grp)
'Get the first day of the month
Public Function FirstDayOfMonth(ByVal sourceDate As DateTime) As DateTime
Return New DateTime(sourceDate.Year, sourceDate.Month, 1)
End Function
'Get the last day of the month
Public Function LastDayOfMonth(ByVal sourceDate As DateTime) As DateTime
Dim lastDay As DateTime = New DateTime(sourceDate.Year, sourceDate.Month, 1)
Return lastDay.AddMonths(1).AddDays(-1)
End Function
Понял работать, вот код.
Dim ChartData = (From a In db.Alarms _
Where a.Generated >= FirstDayOfMonth(DateTimeNow) And a.Generated <= LastDayOfMonth(DateTimeNow) _
Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
Select New With {CalendarDate, .AlarmCount = g.Count()})
Вы пробовали? – DLeh
У меня есть и я не могу его скомпилировать из-за проблем с синтаксисом. Понял, что я бы спросил, как люди используют счет здесь и учиться на этом. – Landmine
Ваш 'where' довольно запутанный. Вы просто пытаетесь добавить 120 месяцев? – paqogomez