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

时间:2018-02-13 10:56:25

标签: c# asp.net asp.net-mvc list

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

这是Salary的模型

    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中执行此操作?

更新

这可能会给这个兔子洞带来一些线索

回应Michael Randalls回答

  

是。但是你计算了日期的最大值和最小值之间的差异。   我需要计算其他。例如,员工有3个工资支付。一世   需要显示这些付款之间的最长时间。所以这将是3付款-2   付款,2付款 - 1付款。并且如果例如1个变体   差异越大,我需要表现出来。

3 个答案:

答案 0 :(得分:2)

如果您只需找到相邻元素之间的最大差异,而不需要创建differences的完整列表,则可以在跳过初始元素后自己Zip列表,并获取{{1这样:

Max

答案 1 :(得分:0)

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;
  }
}

答案 2 :(得分:0)

我是一个赌博的人,我是否亲近?

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()