使用foreach循环获取列表中的最后3项c#

时间:2016-08-31 08:38:18

标签: c# asp.net-mvc loops

如何从我的图片列表中获取最后3项?我正在使用foreach循环,因此我可以获取单个图像并访问其属性,例如img标记的Url

这是我的代码:

<div>
    @foreach (var image in Model.Images)
    {
        <img src="@image.Url" class="ArticleMainImage" />
    }
</div>

5 个答案:

答案 0 :(得分:5)

Model.Images.Reverse().Take(3).Reverse();

对于可枚举的结果 -

 Model.Images.AsEnumerable().Reverse().Take(3).Reverse()

找到适合性的扩展方法 -

public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> coll, int N)
{
    return coll.Reverse().Take(N).Reverse();
}

来源 - https://stackoverflow.com/a/3453282/1982631

答案 1 :(得分:3)

由于Model.ImagesList<Image>,您只需访问其Count属性并索引for循环中的最后三个元素:

@for (int i = Model.Images.Count - 3; i < Model.Images.Count; i++)
{
    <img src="@Model.Images[i].Url" class="ArticleMainImage" />
}

答案 2 :(得分:3)

如果集合有超过3个项目,那么LINQ代码应该占用3个最后的项目。它没有进行任何排序以保持图像顺序完整。它只是跳过了几个第一项。

<div>
    @foreach (var image in (Model.Images.Count > 3 ? Model.Images.Skip(Model.Images.Count - 3) : Model.Images))
    {
            <img src="@image.Url" class="ArticleMainImage" />
    }
</div>

答案 3 :(得分:1)

如果图片是List,我想你可以使用:

List<Image> last3 = im.OrderByDescending(i => i).Take(3).ToList();

答案 4 :(得分:-1)

您可以使用for子句而不是foreach来更好地控制从列表中获取的图像数量

<div>
@{
     @for(int i=0; i<= 3; i++)
     {
        if(i >= Model.Images.Count)
            break; //That in case your collection has less than 3 images
        var image = Model.Images[Model.Images.Count-i-1];
        <img src="@image.Url" class="ArticleMainImage" /> 
     } 
}
</div>