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

时间:2011-04-17 14:57:41

标签: c# asp.net-mvc linq generics

我有一个通用的对象列表,例如:List<Photo>并希望将其转换为我可以在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有一种很好的方法吗?提供分页矩阵显示的列数,行数和页数,或其他更好的想法。

1 个答案:

答案 0 :(得分:3)

您可以根据所需的列数GroupBy()使用x创建矩阵:

photos.Select( (photo, index) => new { Index = index, Photo = photo })
      .GroupBy( n=> n.Index / x)
      .Select( g => g.Select( p=> p.Photo).ToList())
      .ToList();

结果是List<List<Photo>>每个内部列表中都有x张照片。然后你应该只能使用两个foreach循环来渲染它们(如你的例子中所示)。