Автоинкрементный общий список с использованием LINQ в C # - PullRequest
8 голосов
/ 14 октября 2011

Есть ли хороший способ предоставить столбец индекса стиля "автоинкремент" (от 1..x) при проецировании элементов с использованием LINQ?

В качестве основного примера я ищу столбец индекса ниже, чтобы перейти от 1 к количеству элементов в списке.

var items = from s1 in list
    select new BrowsingSessionItemModel { Id = s1.Id, Index = 0 };

Итерация по списку будет простым вариантом, но мне было интересно, есть ли лучший способ сделать это?

Ответы [ 2 ]

13 голосов
/ 14 октября 2011

Вы не можете сделать это с выражениями LINQ.Вы можете использовать следующий метод расширения .Select:

var items = list.Select((x, index) => new BrowsingSessionItemModel { 
    Id = x.Id, 
    Index = index 
});
7 голосов
/ 14 октября 2011

Вы можете использовать перегрузку Select, которая также принимает индекс для проекции:

var items = list.Select((value, index) => new BrowsingSessionItemModel { 
                                                Id = value.Id,
                                                Index = index
                                          });

Обратите внимание, что для этой перегрузки нет поддержки выражений запросов. Если вы на самом деле извлекаете значения из базы данных (неясно, действительно ли list является List<T>), вы, вероятно, должны убедиться, что у вас есть соответствующий порядок, иначе результаты будут несколько произвольными.

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