我有一个问题。
我有模型,我在页面中显示这个模型,感谢foreach。在模型中我有列(vPeriod
),我需要将当前项(例如vPeriod = 2016
)与下一项(例如vPeriod = 2017
)进行比较,我不知道如何比较!
foreach(var item in Model)
{
if(current.vPeriod == next.vPeriod)
{
//do something
}
else
{
//do something
}
}
如果我使用for
,这是一种简单的方法。但是如何使用foreach
?
代码视图:
<tr class="line2">
<td></td>
<td></td>
<td></td>
<td></td>
<td style="color: #5f6877;">2016</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
@foreach (var itemData in Model)
{
if (itemData.vPeriod == "2016")
{
<tr class="line3">
<td>@itemData.vAddress</td>
<td>@itemData.vCreateDate</td>
<td>@itemData.iCountOfFloors</td>
<td>@itemData.iCountOfRooms</td>
<td>@itemData.iAreaOfRooms</td>
<td>@itemData.vLastRepairs</td>
<td>@itemData.vType</td>
<td>@itemData.vBelonging</td>
<td>@itemData.vPlanRepairs</td>
</tr>
}
}
<tr class="line2">
<td></td>
<td></td>
<td></td>
<td></td>
<td style="color: #5f6877;">2017</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
@foreach (var itemData in Model)
{
if (itemData.vPeriod == "2017")
{
<tr class="line3">
<td>@itemData.vAddress</td>
<td>@itemData.vCreateDate</td>
<td>@itemData.iCountOfFloors</td>
<td>@itemData.iCountOfRooms</td>
<td>@itemData.iAreaOfRooms</td>
<td>@itemData.vLastRepairs</td>
<td>@itemData.vType</td>
<td>@itemData.vBelonging</td>
<td>@itemData.vPlanRepairs</td>
</tr>
}
}
真是太可怕了!我可以有很多不同的年份,并且所有的时间都需要创建一个包含数据的块和一年的foreach块。
答案 0 :(得分:2)
您无法使用foreach
循环访问下一个元素。相反,您应该使用for
循环,并且在数组索引的基础上,您可以比较这两个值。使用类似这样的东西
for(int i=0; i<Model.Count-1; i++)
{
list[i] != list.Last() ? Compare(list[i], list[i+1]) : break;
}
希望这有帮助!
答案 1 :(得分:2)
用于解决方案:
var array = Model.ToArray();
for (int i = 0; i < array.Length - 1; i++)
{
if(array[i].vPeriod == array[i + 1].vPeriod)
{
//do something
}
else
{
//do something
}
}
使用foreach解决方案,根据您的需要调整prev类型:
string prev = string.Empty;
bool first = true;
foreach (var item in Model)
{
if (first)
{
first = false;
}
else if (prev == item)
{
//do something
}
else
{
//do something
}
prev = item;
}
答案 2 :(得分:0)
试试这个:
int counter = 1;
foreach(var item in Model)
{
if(counter == Model.Count)
{
break;
}
if(item == Model[counter])
{
//do something
}
else
{
//do something
}
counter++;
}
答案 3 :(得分:0)
谢谢大家。我做的。我做了新的组合模型和使用循环。我认为,这是一个可靠的变体来回答。
代码模型:
using System.Collections.Generic;
namespace NarkomApp.Models
{
public class Repairs_RepairsPeriodModel
{
public List<REPAIRS> repairsModel { get; set; }
public List<REPAIRS_PERIOD> repairsPeriodModel { get; set; }
}
}
代码视图:
@for (int i = 0; i < Model.repairsPeriodModel.Count; i++)
{
<tr class="line2">
<td></td>
<td></td>
<td></td>
<td></td>
<td style="color: #5f6877;">@Model.repairsPeriodModel[i].vPeriod</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
for (int j = 0; j < Model.repairsModel.Count; j++)
{
if (Model.repairsPeriodModel[i].iIdRepairsPeriod == Model.repairsModel[j].fk_iIdRepairsPeriod)
{
<tr class="line3">
<td>@Model.repairsModel[j].vAddress</td>
<td>@Model.repairsModel[j].vCreateDate</td>
<td>@Model.repairsModel[j].iCountOfFloors</td>
<td>@Model.repairsModel[j].iCountOfRooms</td>
<td>@Model.repairsModel[j].iAreaOfRooms</td>
<td>@Model.repairsModel[j].vLastRepairs</td>
<td>@Model.repairsModel[j].vType</td>
<td>@Model.repairsModel[j].vBelonging</td>
<td>@Model.repairsModel[j].vPlanRepairs</td>
</tr>
}
}
}
最后,我有一个很好的数据表:)