繁体   English   中英

从日期时间获取最大值(C#)

[英]Get max value from datetimes (c#)

我有代码从表列中获取所有值,并计算平均薪水和薪水日期之间的最大差额。

这是工资的模型

    public int Id { get; set; }
    public DateTime Date { get; set; }
    public decimal Amount { get; set; }
    public Nullable<int> Employee_Id { get; set; }

    public virtual Employee Employee { get; set; }

这是Viewmodel代码

public class SalariesViewModel
{
    public string DepartmentName { get; set; }
    public decimal AverageSalary { get; set; }

    public IEnumerable<DateTime> Dates{ get; set; }
    public double MaxDifference { get; set; }
}

这是我计算平均工资的代码

     var maxdiff = 0;
        List<SalariesViewModel> result = new List<SalariesViewModel>();
        var employees = db.Employees.Select(x => new
        {
            Department = x.Department.Name,
            Name = x.Name,
            Salary = x.Salaries.OrderByDescending(y => y.Date).FirstOrDefault().Amount,
            Date = x.Salaries.OrderByDescending(y => y.Date).FirstOrDefault().Date 

        });



        var data = employees.GroupBy(m => m.Department).Select(x => new SalariesViewModel
        {
            DepartmentName = x.Key,
            AverageSalary = x.Average(y => y.Salary),
            Dates = x.Select(y=> y.Date).ToList()

        }).ToList();



        for (int i = 0; i < data.Count - 1; i++) {


        }

        return data;
    }

我也需要计算最大差异

我只能选择日期并计算它们之间的差异并找到最大值。 然后推送到ViewModel。

但是我认为,这不是很好的经验。

如何在data查询或ViewModel中做到这一点?

更新资料

无论如何,这可能会给我们提供一些线索

回应迈克尔·兰德尔斯回答

是。 但是,您可以计算日期的最大值和最小值之间的差异。 我需要计算其他。 例如,雇员有3个薪水。 我需要显示两次付款之间的最长时间。 因此它将是3付款-2付款和2付款-1付款。 例如,如果1个变体差异较大,则需要显示它。

如果您只需要查找相邻元素之间的最大差异,而不需要创建整个differences列表,则可以在跳过初始元素之后将列表与自身一起Zip ,并通过以下方式获取Max

var maxDiff = dates.Zip(dates.Skip(1), (c, n) => (n-c).TotalSeconds).Max();
var maxdiff = 0;
for (int i = 0; i < dates.Count - 1; i++)
{
  var result = (dates[i + 1] - dates[i]).TotalSeconds;
  if (maxdiff < result)
  {
        maxdiff = result;
  }
}

我是赌博人,我靠近吗?

var data = employees.GroupBy(m => m.Department).Select(x => new SalariesViewModel
{
    DepartmentName = x.Key,
    AverageSalary = x.Average(y => y.Salary),
    MaxDifference = (x.Max(y => y.Date) - x.Min(y => y.Date)).TotalDays,
 }).ToList()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM