现在这严重困扰着我。我有以下控制器操作方法:
public PartialViewResult ScrollEmployeeCompYear(int employeeid, string direction, int latestYearCurrentlyDisplayed)
{
List<EmployeeCompensationYear> fourYearsList = new List<EmployeeCompensationYear>();
Employee Employee = _db.Employees.Find(employeeid);
EmployeeCompensationYear compyear;
if (direction == "right")
{
int latestYearDisplayedMinusThree = latestYearCurrentlyDisplayed - 3;
for (int i = 0; i < 4; i++)
{
if ((compyear = Employee.CompensationYear.Find(m => m.Year == --latestYearDisplayedMinusThree)) != null)
{
fourYearsList.Add(compyear);
}
else
{
break;
}
}
fourYearsList.Reverse();
}
else if (direction == "left")
{
for (int i = 0; i < 4; i++)
{
if ((compyear = Employee.CompensationYear.Find(m => m.Year == ++latestYearCurrentlyDisplayed)) != null)
{
fourYearsList.Add(compyear);
}
else
{
break;
}
}
}
return PartialView(fourYearsList);
}
有两个问题,我从Html.Ajax帮助器调用此方法,“latestYearCurrentlyDisplayed”返回2020(我在employee.compensationYear的数据库中)。顺便提一下,我在数据库中有这个模型的2014年到2020年的数据。
所以无论如何,第一个问题,当2020返回时,我得到了“正确”的方向,我正在创建一个新的int变量,它获得2020-3,应该等于2017年。然后在循环中,在if中,我正在为员工的薪酬分配竞争者年份等于“--latestYearDisplayedMinusThree”。这应该从2017年首先减去1,然后分配它,但由于某种原因,它不是我在2015年而不是2016年的列表中的第一项。
另一个问题是,当我得到“离开”并且2015年作为我最近的显示年份时,它会进入else if (direction == "left")
这很棒,但随后它会返回null,因为我指定了compyear,尽管我有++ 2015(再次,我有2014年到2020年)。
我在这里的代码中做错了吗?
答案 0 :(得分:1)
我认为问题在于一元(++x
和--x
)运算符在循环内部如何工作,并且可能没有按照您的期望执行。
但是,如果我理解你想要什么,那么这应该简化一些事情:
if (direction == "right")
{
fourYearsList = Employee.CompensationYear.Where(m => m.Year <= (latestYearCurrentlyDisplayed - 4)).Take(4).ToList();
}
else if (direction == "left")
{
fourYearsList = Employee.CompensationYear.Where(m => m.Year >= (latestYearCurrentlyDisplayed + 1)).Take(4).ToList();
}
根据您要显示的内容,可能需要调整起始值latestYearCurrentlyDisplayed - 4
和latestYearCurrentlyDisplayed + 1
,以及根据您希望列表显示方式的顺序进行调整。