asp.net mvc控制器计算不正确的值

时间:2014-11-13 03:26:12

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

现在这严重困扰着我。我有以下控制器操作方法:

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年)。

我在这里的代码中做错了吗?

1 个答案:

答案 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 - 4latestYearCurrentlyDisplayed + 1,以及根据您希望列表显示方式的顺序进行调整。