我有一个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的内在特性,但是鉴于它是按顺序排序的,所以我不明白为什么不存在设置元素索引的方法。
答案 0 :(得分:2)
使用Select
语句,您可以同时选择index
和item
,因此您应该可以执行以下操作:
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
});