[英]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.