Как мне проверить, сколько раз группа значений появлялась под определенной датой / днем недели в Entity Framework

#asp.net-mvc #entity-framework

#asp.net-mvc #entity-framework

Вопрос:

Мне нужен способ проверить максимальное и минимальное время вызова заявки в определенный день недели (например: понедельник: максимум 5 заявок; 2 минуты), у заявки есть идентификатор в диапазоне от 0 до 4, поэтому я хочу, чтобы они все были замечены.

Это то, что у меня сейчас есть:

 int S = 0;
var senhas = _db.SenhaSet.ToList();
double[] countersemana = new double[20];

foreach (var senha in senhas)
{
    if (senha.Data.DayOfWeek == DayOfWeek.Monday amp;amp; senha.IdTipoSenha >= 0)
    {
        S  ;
        break;
    }
}
  

Комментарии:

1. Вы не можете добавить все заявки на понедельник в a, List затем найдите Max() и Min() из списка?

2. да, но как я могу тогда узнать, что в понедельник было больше всего?

Ответ №1:

Ваш код очень неэффективен, поскольку он полагается на возврат всей таблицы SenhaSet из базы данных, а затем цикл вокруг нее. Вы хотите применить фильтр через Entity Framework к базе данных. Что-то вроде (я не знаю имен ваших столбцов, поэтому предполагаю):

 var senhas = _db.SenhaSet
    .Where(s => SqlFunctions.DatePart("dw", s.Data) == DayOfWeek.Monday amp;amp; IdTipoSenha >= 0)
    .GroupBy(s => DbFunctions.TruncateTime(s.Data))
    .Select(s => new {
        TicketDate= s.Key,
        Count = s.Count(t => t.IdSenha)
    })
    .ToList();

int maxTickets = senhas.Max(s => s.Count);
int minTickets = senhas.Min(s => s.Count);
  

Это предполагает, что базой данных является SQL Server для использования System.Data.Objects.SqlClient.SqlFunctions.Метод DatePart.

Комментарии:

1. что такое t. Идентификатор собирается?

2. Это просто подсчет количества заявок на эту дату — я просто предполагаю уникальный идентификатор, называемый «Id».

3. значит , просто локальная переменная или что — то в базе данных ?

4. Я предполагаю, что это столбец в таблице SenhaSet. Поскольку я ничего не знаю о вашей схеме базы данных, я просто предполагаю имена столбцов, но общая логика должна соблюдаться.

5. получено сообщение об ошибке «не удается неявно преобразовать ‘int’ в ‘bool’