2015-01-15 2 views
0

Я создал и протестировал мой 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()}) 
+0

Вы пробовали? – DLeh

+0

У меня есть и я не могу его скомпилировать из-за проблем с синтаксисом. Понял, что я бы спросил, как люди используют счет здесь и учиться на этом. – Landmine

+0

Ваш 'where' довольно запутанный. Вы просто пытаетесь добавить 120 месяцев? – paqogomez

ответ

-1

Вы можете сделать что-то подобное. (Я думаю, что dd означает день ... `)

var myDate = new DateTime(); //calculate your date... 
Alarms 
    .Where(x => x.Generated >= myDate) 
    .GroupBy(x => x.Generated.Day) 
    .Select (x => new { 
     Day = x.Key, 
     Total = x.Count() 
    } 

Вы не могли бы быть в состоянии группе x.Generated.Day в SQL, если это так, то добавьте .AsEnumerable() после Where() сделать группировку в памяти.

Смежные вопросы