Я пытаюсь сгруппировать некоторые временные метки с помощью выражения linq
var ds = (from wl in dbEntities.tbl_weblog
group wl by new
{
wl.tms_stamp.Value.Date,
wl.tms_stamp.Value.TimeOfDay
} into dateGrp
select new
{
Date = dateGrp.Key.Date,
Time = dateGrp.Key.TimeOfDay,
HitCount = dateGrp.Count(),
TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
}
).ToList();
return Helpers.ToDataSet(ds);
Но я получаю ошибку " Указанный член типа" Дата "не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности. ".
Может ли кто-нибудь помочь мне разрешить это?
Linq-To-Entities не имеет сопоставления для DateTime.Date
для SQL. Поэтому вместо этого вы должны разбить его на год, месяц, день и час, чтобы получить результаты, которые вы ищете.
var ds = (from wl in dbEntities.tbl_weblog
group wl by new
{
wl.tms_stamp.Value.Year,
wl.tms_stamp.Value.Month,
wl.tms_stamp.Value.Day,
wl.tms_stamp.Value.Hour
} into dateGrp
select new
{
Year = dateGrp.Year,
Month= dateGrp.Month,
Day= dateGrp.Day,
Hour= dateGrp.Hour,
HitCount = dateGrp.Count(),
TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
}).ToList();
Затем, когда вы потребляете ds
вы можете сместить детали даты вместе.
foreach(var item in ds)
{
var date = new DateTime(item.Year, item.Month, item.Day);
var hour = item.Hour;
}
TimeOfDay
не будет группировать это по часам. Для этого вам понадобитсяDateTime.Hour
, и вам нужно разбить его на год, месяц и день. Я обновил свой ответ.