Лямбда ForEach () Позиция в индексе - PullRequest
1 голос
/ 09 января 2009

Это как-то связано с asp.net MVC только для примера, но я надеялся добиться чего-то подобного:

new SelectList(ViewData.Model.Formats.ToList().ForEach(x => index + " - " + x.Name), "ID", "Name");

В основном, пытаясь быть умным и вернуть «индекс» в виде числа 1 - n , где n - количество элементов в списке ViewData.Model.Formats, поэтому мой список выбора # префикс для каждой записи. Есть ли простой способ сделать это, или я собираюсь создать новый список с этим дополнением и избавиться от лямбда-трюка?

Ответы [ 3 ]

4 голосов
/ 09 января 2009

Вы можете использовать тот факт, что LINQ Select может дать вам индекс каждого элемента:

new SelectList(ViewData.Model.Formats.Select((x, i) => (i + 1) + " - " + x.Name, "ID", "Name");

Обратите внимание, что это не означает доступ к базе данных, просто стандартный LINQ to Objects.

1 голос
/ 09 января 2009

Как насчет

int index = 0;
new SelectList(ViewData.Model.Formats.ForEach(x => ++index + " - " + x.Name), "ID", "Name");

(Я пробовал только лямбда-выражение с захватом index. Я не знаю о других классах.)

0 голосов
/ 09 января 2009

С огромной помощью Нила и Хосама я получил это, работая со следующим:

new SelectList(ViewData.Model.MessageTypeFieldFormats.Select((x, i) => new { ID = x.ID, Name = (i + 1) + " - " + x.Name })

Анон, методы рок!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...