如何检查实体框架中特定日期/工作日下一组值出现的次数

问题描述 投票:0回答:1

我想要一种方法来检查在特定工作日调用票证的最大和最小时间(例如:星期一:最多5张票; 2分钟),票证的ID范围在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 && senha.IdTipoSenha >= 0)
    {
        S++;
        break;
    }
}
asp.net-mvc entity-framework
1个回答
0
投票

您的代码效率非常低,因为它依赖于从数据库返回整个SenhaSet表然后循环它。您希望通过Entity Framework在数据库上应用过滤器。类似的东西(我不知道你的列名,所以我猜):

var senhas = _db.SenhaSet
    .Where(s => SqlFunctions.DatePart("dw", s.Data) == DayOfWeek.Monday && 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方法。

© www.soinside.com 2019 - 2024. All rights reserved.