Определите количество строк в минуту, используя Entity ObjectContext и с помощью итерации цикла For - PullRequest
1 голос
/ 05 марта 2012

У меня есть таблица SQL Server 2008 со столбцом типа данных datetime. Я хотел бы запрос сущности, который производит количество строк для каждого минутного интервала. Например, результаты будут выглядеть так:

1. 7/3/2011 14:00:00 | 1000
2. 7/3/2011 14:01:00 | 1097

Первая строка будет означать, что 1000 строк имеют значение datetime в период с 03.07.2011 13:59:00 по 03.03.2011 14: 00: 00.

Вторая строка будет означать, что 1097 строк имеют значение datetime в период с 03.07.2011, 14:00 и 03.03.2011, 14: 01: 00.

Я могу получить этот результат с помощью этого SQL-запроса

select 
stamp = dateadd(mi,datediff(mi,0,[date]) + 1,0),
rows = count(1) from WMLSLog group by dateadd(minute,datediff(mi,0,[date])+1,0) 
order by stamp asc

Результат:

- stamp                 rows
- 2012-03-03 16:54:00.000   55
- 2012-03-03 16:55:00.000   120
- 2012-03-03 16:56:00.000   120

Может кто-нибудь помочь мне получить это с помощью Entity Framework

public IQueryable<WMLSLog> GetWMLSLogs()
    {
        var result = this.ObjectContext.WMLSLogs..........;
        //This returns a DateStamp and Count
    }

Или цикл for для получения результата из возвращенной коллекции IQueryable<WMLSLog>.

1 Ответ

0 голосов
/ 06 марта 2012

После большого количества исследований я обнаружил, что .Net 4 получил большинство функций sql в System.Data.Objects.SqlClient. Он имеет большинство общих функций sql, таких как DateDiff, DateAdd и т. Д. Поэтому я использовал их в моем запросе Entity to Linq.

 DateTime zeroDate = new DateTime(2008, 1, 1, 0, 0, 0);
        this.ObjectContext.WMLSLogs.GroupBy(s => SqlFunctions.DateAdd("mi", ((SqlFunctions.DateDiff("mi", zeroDate, s.Date))), zeroDate)).
            Select(g => new
                {
                    Date = g.Key,
                    count = g.Count()
                }).OrderBy(x => x.Date);

И я получил ожидаемый результат.

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