如何将当前项与foreach asp.net中的下一项进行比较

时间:2017-07-05 12:11:05

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

我有一个问题。

我有模型,我在页面中显示这个模型,感谢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块。

4 个答案:

答案 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>
                    }
                }
            }

最后,我有一个很好的数据表:)