получить среднее значение Datetime из БД и вычесть одну дату из другой - PullRequest
5 голосов
/ 31 августа 2009
  • Как получить среднее время из поля Datetime через Entity Framework?
  • Как вычесть одну дату из другой?

Я думаю о чем-то вроде:

ObjectQuery<Visit> visits = myentitys.Visits;
            var uQuery =
            from visit in visits
            group visit by visit.ArrivalTime.Value.Day into g
            select new
            {
                 Day = g.Key,
                 Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes)
            };

для получения среднего времени пребывания посетителя, сгруппированного по Дню.

Ответы [ 2 ]

7 голосов
/ 13 ноября 2009

Вот как вы это делаете, предполагая, что вашим резервным хранилищем является SQL Server. Кстати, я исправил, как я полагаю, опечатку - вы назначаете общее количество минут в поле под названием Часы. Я переименовал поле в Протокол для будущих аудиторий.

ObjectQuery<Visit> visits = myentitys.Visits;
var uQuery = from visit in visits
             group visit by visit.ArrivalTime.Value.Day into g
             select new
             {
                 Day = g.Key,
                 Minutes = g.Average(visit => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", visit.LeaveTime.Value, visit.ArrivalTime.Value))
             };

Вызывает разочарование, что LINQ to Entities не поддерживает внутреннее преобразование вычитания DateTime в DateDiff и затем приводит к получению объекта TimeSpan.

1 голос
/ 31 августа 2009

Я бы предпочел получить данные из базы данных, а затем выполнить среднюю функцию в памяти. Хотя я не уверен, что может повлиять на выступления ...

            List<Visit> visits = myentitys.Visits.ToList();//Get the Visits entities you need in memory,
                                           //of course,you can filter it here
            var uQuery =
            from visit in visits
            group visit by visit.ArrivalTime.Value.Day into g
            select new
            {
                Day = g.Key,
                Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes)
            };

Этот вид арифметической операции невозможно перевести в запросе sql (как исключение говорит: аргументы DbArithmeticExpression должны иметь общий числовой тип), но это возможно с объектами в памяти.

Надеюсь, это поможет.

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