Member 8668966 Ответов: 1

Как сортировать записи перед использованием цикла foreach


I’m working on an ASP.Net Razor-Pages  application that allows users to query a database and then export the results to an Excel spreadsheet.  

I’ve completed the code that queries the database, filters and sorts the data, then writes the result to an array.  Before writing the results to the array. I use a foreach statement to step through each record, copying each column to a variable, and then exporting the values in each column to an Excel spreadsheet.  The problem is the records are not sorted, they
 appear in that the occur in the database.  If I display the results to an array or a list the results are sorted as expected.

My code is below.  Any suggestions on how I can the records to sort (alphabetically by the PubName column).  Another option would be to copy the values from the array or list to variables and then export them to the spreadsheet.

Any suggestion on how this might be accomplished will be appreciated.  Thanks in advance


Что я уже пробовал:

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование системы.Нарезание резьбы.Задачи;
использование Microsoft.AspNetCore.В MVC;
использование Microsoft.AspNetCore.В MVC.RazorPages;
использование Microsoft.EntityFrameworkCore;
использование PSA.Data;
использование пса.Модели;

пространство имен PSA.Страницы.MoveData
{
публичный класс IndexModel : PageModel
{
частные данные PSA только для чтения.ApplicationDbContext _context;

public IndexModel(PSA.Data.Контекст ApplicationDbContext)
{
_context = контекст;
}

public string PubNameSort { get; set; }
публичная строка CurrentSort { get; set; }
общественного строка изъятия { получить; набор; }
публичная строка pFSGNum { get; set; }
публичная строка pFcode { get; set; }
публичный инт? pHours { get; set; }

//общественного объекта IList&ЛТ;издательство&ГТ; издателя { получить;набор; }
общественные ArraySegment&ЛТ;издательство&ГТ; издателя { получить; набор; }

общих асинхронных задач OnGetAsync(строка сортировки, строки searchFSGNum)
{
//получить логин пользователя
строка userName = пользователь.Идентичности.Название;

//получить полное имя пользователя на основе логина пользователя
var fullNameQuery = from n в _context.Пользователи.AsNoTracking()
где n.UserName == имя пользователя
выберите (n.фамилия + ", " + n.имя);

строка fName = await fullNameQuery.SingleAsync();

//get users fsgnum на основе полного имени пользователя
ВАР fsgQuery = от U в _context.Издатель.AsNoTracking()
где u.PubName == fName
выберите u.FSGNum;

строка fsgNum = ожидание fsgQuery.SingleAsync();


//следующий код используется для сортировки записей по имени издателя
PubNameSort = строка.IsNullOrEmpty(сортировщик) ? "Name_desc" : "";


//запрос таблицы издателей с использованием FSGNum в качестве фильтра и Pubname для порядка сортировки
ВАР publisherQuery = с п в _context.Издатель.AsNoTracking()
где p.FSGNum == fsgNum
заказатьпо стр. PubName
выберите p;


foreach (Publisher p в publisherQuery)
{
если (!строка.IsNullOrEmpty(стр. PubName))
{
изъятия = стр. PubName;
pFSGNum = стр. FSGNum;
pFcode = стр. FCode;
pHours = стр. ПЛА;

// добавление кода для экспорта переменных в электронную таблицу excel
// см. документ по адресу: http://www.talkingdotnet.com/?s=import-export&submit=Поиск
}
}


Publisher = ожидание запроса publisherquery.ToArrayAsync(); //.ToListAsync()


}
}
}

1 Ответов

Рейтинг:
1

Super Lloyd

В другой теме ваш код выполняет SQL-запрос дважды, во-первых, когда вы foreach, во-вторых, когда вы вызываете ToArrayAsync()

На ваш вопрос, я не знаю, почему ваш код не отсортирован. В этом весь смысл оператора orderby, он должен быть отсортирован (по PubName).
Я подозреваю, что ошибка может лежать в другом месте