В базе данных SQL Server у меня есть таблица с записями журнала - timestamp
и description
.LINQ2SQL и NHibernate, группировка по вычисленным столбцам
Мне нужно получить появление журналов через определенные промежутки времени (30 минут).
Например:
01.01.2015 00:00 - 100
01.01.2015 00:30 - 200
01.01.2015 01:00 - 2
и так далее ...
Что у меня есть:
var logs = session.Query<Log>;
//... other operations on logs queryable
var intervalInMinutes = 30;
var logsFrequency = logs
.GroupBy(l => new
{
Year = l.LogTimestamp.Year,
Month = l.LogTimestamp.Month,
Day = l.LogTimestamp.Day,
Hour = l.LogTimestamp.Hour,
Minute = (l.LogTimestamp.Minute/intervalInMinutes) * intervalInMinutes,
})
.Select(g => new LogsOccurence()
{
StartingDatetime = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day, g.Key.Hour, g.Key.Minute, 0),
Frequency = g.Count()
})
.ToList();
После запроса не удается:
исключение типа «NHibernate .Exceptions.GenericADOException 'произошел в NHibernate .dll, но не был обработан в пользовательском коде
Дополнительная информация: не удалось выполнить запрос
Внутреннее исключение: Колонка «dbo.Log.LogTimestamp» недопустим в списке выбора, поскольку он не содержится ни в совокупности или предложение GROUP BY.
Сформирован выберите утверждение:
select
datepart(year, Log0_.LogTimestamp) as col_0_0_
, datepart(month, Log0_.LogTimestamp) as col_1_0_
, datepart(day, Log0_.LogTimestamp) as col_2_0_
, datepart(hour, Log0_.LogTimestamp) as col_3_0_
, datepart(minute, Log0_.LogTimestamp) as col_4_0_
, cast(count(*) as INT) as col_5_0_
from
dbo.[Log] Log0_
group by
datepart(year, Log0_.LogTimestamp)
, datepart(month, Log0_.LogTimestamp)
, datepart(day, Log0_.LogTimestamp)
, datepart(hour, Log0_.LogTimestamp)
, datepart(minute, Log0_.LogTimestamp)/@p0*@p1
Name:p1 - Value:30 Name:p2 - Value:30
Приоритет операторов/заказ является неправильным в
groupby
пdatepart(minute, Log0_.LogTimestamp)/@p0 * @p1
Выберите часть за несколько минут отличается от групповой части для минут - выберите сбой
Что не так с моим Linq и как правильно писать?
Я использую NHibernate build 4.0.4.GA.
Это похоже на ошибку. Я протестировал ваш Linq-запрос с использованием LinqToSql (Entity Framework), и он работал нормально. Я также посмотрел на отслеживание проблем NHibernate JIRA (https://nhibernate.jira.com) на открытые ошибки, но, похоже, никто не соответствует этому. Итак, я думаю, что это неподтвержденная ошибка. – Ismael