有没有一种方法可以设置查询中以linq select返回的每个元素的排序顺序

时间:2019-09-24 18:40:39

标签: c# linq

我有一个LINQ select查询,该查询获取一本书的清单:

var books = from b in _context.Books
            where b.Available && b.BookType == bookType
            orderby b.Title
            select new BookViewModel
            {
                Title = b.Title,
                Description = b.Description,
                Id = b.Id,
                SortOrder = ?
            };

BookViewModel有一个SortOrder属性,我想在查询中设置。列表中的第一本书将具有SortOrder = 1,第二本书将具有2,依此类推。本质上,这只是该书在返回列表中的索引。

是否可以在查询中进行设置?我知道一旦有了列表,就可以再执行一次linq查询,但这似乎效率很低。我不太了解linq select的内在特性,但是鉴于它是按顺序排序的,所以我不明白为什么不存在设置元素索引的方法。

1 个答案:

答案 0 :(得分:2)

使用Select语句,您可以同时选择indexitem,因此您应该可以执行以下操作:

var books = _context.Books
    .Where(book => book.Available && book.BookType == bookType)
    .OrderBy(book => book.Title)
    .ToList()
    .Select((book, index) => new BookViewModel
    {
        Title = book.Title,
        Description = book.Description,
        Id = book.Id,
        SortOrder = index + 1
    });