【问题标题】:Group By Asp net core按 Asp 网络核心分组
【发布时间】:2018-02-04 06:04:23
【问题描述】:

我正在制作一个与队列相关的小型应用程序,但我遇到了一个问题。 我有上下文数据

public class DATA_ABONENT_ARCHIVE
{
    [Key]
    public int ID { get; set; }
    public int NUM { get; set; }
    public string PREFIX { get; set; }
    public string FULL_NUM { get; set; }
    public DateTime DATETIME_REGISTR { get; set; }
    public DateTime DATE_REGISTR { get; set; }
    public TimeSpan TIME_REGISTR { get; set; }
    public int SPR_USLUGI_ID { get; set; }
    public Nullable<int> SPR_LGOTA_ID { get; set; }
    public DateTime DATETIME_START_SERVICE { get; set; }
    public DateTime DATE_START_SERVICE { get; set; }
    public TimeSpan TIME_START_SERVICE { get; set; }
    public int SPR_WINDOW_ID { get; set; }
    public int SPR_OPERATOR_ID { get; set; }
    public string FIO { get; set; }
    public DateTime DATETIME_STOP_SERVICE { get; set; }
    public DateTime DATE_STOP_SERVICE { get; set; }
    public DateTime TIME_STOP_SERVICE { get; set; }
    public int SPR_STATUS_ID { get; set; }
    public int PRIORITET { get; set; }
    public int PRERECORD { get; set; }
    public Nullable<DateTime> START_TIMEOUT { get; set; }
    public Nullable<DateTime> STOP_TIMEOUT { get; set; }
    public int SPR_BASE_ID { get; set; }
}

在控制器中,我必须进行选择并获得一个模型列表,其中包含 3 个日期字段、当天的人数、平均等待时间

public class AverageExpectationViewModel
{
    public ReportResultModel ReportResult { get; set; }
    public IEnumerable<AverageWaitingModel> AverageWaitingOutgoing { get; set; } 
}

输出模型包含两个消息字段和一个列表

我愿意

IEnumerable<AverageWaitingModel> AverageWaiting = Db_Resource.DATA_ABONENT_ARCHIVE

                .Where(c => c.SPR_BASE_ID == Convert.ToInt32(data.BranchId))
                .Where(c => c.DATE_REGISTR >= startData)
                .Where(c => c.DATE_REGISTR <= endData)
                .GroupBy(b=>b.DATE_REGISTR)  
                .Select(c => new AverageWaitingModel
                {
                    DateRegistr = c.Key,
                    Count = c.Count(),
                    //Waiting = (Math.Round(c.TIME_START_SERVICE.TotalMinutes - c.TIME_REGISTR.TotalMinutes, 2))
                })
                .ToList();

我这样做了,但我不知道如何在铲土时更进一步并找到平均值,也许你有一些很好的想法如何做到这一点

【问题讨论】:

    标签: asp.net linq entity-framework-6


    【解决方案1】:

    我决定这样做,也许有人会帮忙。

            IEnumerable<AverageWaitingModel> AverageWaiting = await Db_Resource.DATA_ABONENT_ARCHIVE 
                .Where(c => c.SPR_BASE_ID == Convert.ToInt32(data.BranchId))
                .Where(c => c.DATE_REGISTR >= startData)
                .Where(c => c.DATE_REGISTR <= endData)
                .GroupBy(b=> new { b.DATE_REGISTR })  
                .Select(c => new AverageWaitingModel
                {
                    DateRegistr = c.Key.DATE_REGISTR,
                    Count = c.Count(),
                    Waiting = Math.Round(c.Average(p=>(p.TIME_START_SERVICE.TotalMinutes - p.TIME_REGISTR.TotalMinutes)),2) 
                })
                .ToListAsync(); 
    

    分组的关键是日期,在新模型的日期字段中,记录了关键。使用 Count() 函数,我得到了组中元素的数量。并且平均等待时间已经四舍五入到小数,导致两个字段之间的平均差的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2020-10-16
      • 2019-10-26
      • 1970-01-01
      相关资源
      最近更新 更多