是否有LINQ方式将对象的通用列表转换为相同类型的X by Y矩阵?

问题描述

| 我有一个通用的对象列表,例如:“ 0”,并希望将其转换为我可以在MVC视图上使用的对象。 形式(基本示例):
<% foreach (var row in PhotoList) { %>

// Render Matrix (using photo properties)
<tr>
    <% foreach(photo in row) { %>
    <td><%=photo.Name%></td>
    <% } %>
</tr>

<% } %>
我曾经想过使用
List<List<Photo>>()
之类的方法手动执行此操作,但是使用LINQ是否有一种巧妙的方法?提供列矩阵显示的列数,行数和页数,或其他更好的主意。     

解决方法

给定所需的列数
x
,您可以使用
GroupBy()
创建矩阵:
photos.Select( (photo,index) => new { Index = index,Photo = photo })
      .GroupBy( n=> n.Index / x)
      .Select( g => g.Select( p=> p.Photo).ToList())
      .ToList();
结果是每个内部列表中有
x
张照片的
List<List<Photo>>
。然后,您应该只能够使用两个foreach循环来呈现它们(如您的示例所示)。