首页 > 解决方案 > 有没有办法设置查询中 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 排序的,我不明白为什么不存在某种设置元素索引的方法。

标签: c#linq

解决方案


使用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
    });

推荐阅读