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

C# asp.net mvc控制器正在计算不正确的值,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这让我现在很烦。我有以下控制器操作方法: public PartialViewResult ScrollEmployeeCompYear(int employeeid, string direction, int latestYearCurrentlyDisplayed) { List<EmployeeCompensationYear> fourYearsList = new List<EmployeeCompensationYear>(); Employ

这让我现在很烦。我有以下控制器操作方法:

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);
}
public PartialViewResult ScrollEmployeeCompYear(int-employeeid,字符串方向,int-latestyEarlyCurrentDisplayed)
{
列表四年列表=新列表();
Employee=_db.Employees.Find(employeeid);
员工薪酬年度同比;
如果(方向=“右”)
{
int latestYearDisplayedMinusThree=latestyearcurrently显示-3;
对于(int i=0;i<4;i++)
{
if((compyear=Employee.CompensationYear.Find(m=>m.Year==--latestYearDisplayedMinusThree))!=null)
{
四年名单加上(公司年度);
}
其他的
{
打破
}
}
四年列表。反向();
}
否则如果(方向=“左”)
{
对于(int i=0;i<4;i++)
{
如果((compyear=Employee.CompensationYear.Find(m=>m.Year==++latestyearcurrently显示))!=null)
{
四年名单加上(公司年度);
}
其他的
{
打破
}
}
}
返回部分视图(四年列表);
}
有两个问题,我从一个Html.Ajax助手调用这个方法,“LateStyearCurrentDisplayed”返回2020(我在employee.compensationYear的数据库中有)。顺便说一下,我在数据库中有2014年至2020年的数据

所以不管怎样,第一个问题,当2020返回时,我得到了方向“正确”,我正在创建一个新的int变量,得到2020-3,应该等于2017。然后在循环中,在if中,我将Comper分配给员工的补偿年,该年等于“-latestYearDisplayedMinusThree”。这应该先从2017年减去1,然后分配它,但由于某种原因,它不是我在列表中的第一项,我得到的是2015年而不是2016年

另一个问题是,当我将“左”和2015作为我最近显示的年份时,它将进入
else if(direction==“left”)
,这很好,但是对于我分配compyear的位置,它将返回null,即使我有++2015(同样,我有2014到2020)


我是否在这里的代码中做了一些错误的事情???

我认为问题在于一元(
++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();   
}
if(方向==“右”)
{
fourYearsList=Employee.CompensationYear.Where(m=>m.Year m.Year>=(Latesty当前显示+1)).Take(4.ToList();
}

开始值
latestYearCurrentlyDisplayed-4
latestYearCurrentlyDisplayed+1
可能需要调整,具体取决于您希望显示的内容,还需要调整顺序,具体取决于您希望列表的显示方式

你的四年清单上有多少项?因为您反转了fourYearsList,所以该列表中的第一项可能是循环第二次迭代的结果,即2015@DavidTansey但我在分配,不是comparing@PhuongNguyen我想每次我从视图“提交”到控制器时,都会创建一个新的控制器实例,所以如果我反向提交一次,我认为第二次提交是独立的,因此为其创建了一个新列表adding@AbdulAhmad,您的假设是正确的(创建了一个新实例)@StephenMuecke感谢您确认take的作用,这是否包含可能的空值?谢谢,我将++和--更改为+=和-=并且成功了@AbdulAhmad take方法只会在执行了
的位置后,提取
IQueryable
列表中可用的内容。因此
Where
将首先执行查询,并从中创建一个子列表,然后
Take
将提取列表中的前4个元素。因此,列表中不可能存在
null
元素。