Лямбда-выражение для создания таблицы-результата - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть список данных, которые я хочу отобразить в виде таблицы в графическом интерфейсе (HTML).

Я хочу создать лямбда-выражение, чтобы список из сотен элементов, например, был разделен на 20 строк по 5 элементов в каждой.Могу ли я создать краткое лямбда-выражение для этого?

Это то, что я придумал (да, 5 - это магическое число, это количество элементов в строке):

bool isCreateNewRow = true;

var aggregate = Model.Aggregate(new Collection<ICollection<Album>>(), 
                (tableCollection, album) =>
                  {
                      if (isCreateNewRow)
                      {
                          tableCollection.Add(new Collection<Album>());
                          isCreateNewRow = false;
                      }
                      tableCollection.Last().Add(album);
                      if(tableCollection.Last().Count() >= 5)
                      {
                          isCreateNewRow = true;
                      }
                      return tableCollection;
                  });

Есть ли более короткий способ создания 2размерная структура данных (IEnumerables of IEnumerables)?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

Было бы намного проще

а) создать свой (1D) набор результатов
б) использовать циклы 1 или 2 for для обработки (представления) этих результатов в виде таблицы.

Кроме того, поскольку эти 2 шага логически принадлежат разным слоям решения.

1 голос
/ 20 февраля 2011
// Create 20 dummy items.
var albums = Enumerable.Range(1, 20)
    .Select(i => string.Format("Album {0}", i));

// Associate each one with the row index.
var numbered = albums
    .Select((item, index) =>
        new { Row = index / 3, Item = item });

// Arrange into rows.
var table = numbered
    .GroupBy(x => x.Row)
    .Select(g => g.Select(x=>x.Item).AsEnumerable());

На данный момент table является IEnumerable<IEnumerable<string>>.

Чтобы превратить его в HTML, попробуйте это:

var html = rows.Aggregate(
    new StringBuilder("<table>"),
    (tableBuilder, row) => {
        tableBuilder.AppendFormat("<tr>{0}</tr>",
            row.Aggregate(new StringBuilder(),
            (rowBuilder, cell) => {
                rowBuilder.AppendFormat("<td>{0}</td>", cell);
                return rowBuilder;
            }));
        return tableBuilder;
    },
    (tableBuilder) => {
        tableBuilder.Append("</table>");
        return tableBuilder;
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...