我有代码从表列中获取所有值,并计算工资日期之间的平均工资和最大差异。
这是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个变体 差异越大,我需要表现出来。
答案 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()