c# - 有没有办法设置查询中 linq 选择中返回的每个元素的排序顺序
问题描述
我有一个获取书籍列表的 LINQ 选择查询:
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 选择的内部结构,但鉴于它是按 orderby 排序的,我不明白为什么不存在某种设置元素索引的方法。
解决方案
使用Select
语句,您可以同时选择 theindex
和 the 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
});
推荐阅读
- r - 在R中编织到PDF时找不到参考
- javascript - React Native - 将 ActivityIndicator 重新定位到登录按钮
- javascript - addEventListener 不适用于 document.createElement 元素
- flutter - 如何在 List.map() 函数中等待未来并返回字符串列表
- python - 即使我正在*制作*一个文件,我也会收到“FileNotFoundError”
- android - Isis 可以在没有 Google Play 的情况下使用动态功能模块
- c - 写到我在 C 中找到一个空行
- postgresql - Web 抓取和 postgres - 加快获取新 url 的查询
- microsoft-teams - 如何在 microsoft 团队应用程序中计算收到的数据包丢失
- python - 如何使用 pandas 获取给定列的上一年的平均值