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
元素。