#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’