#entity-framework-core #.net-5
#сущность-структура-ядро #.net-5
Вопрос:
У меня есть запрос EFCore:
return await _context.Rubrics
.AsNoTracking()
.Where(i => i.IsApproved == true)
.Include(i => i.EdDraft)
.Include(i => i.Rubric)
.ThenInclude(i => i.Title)
.Where(i => i.EdDraft.AccountId == accountId)
.OrderBy(i => i.Path)
.ToListAsync();
i.Путь — это строка, подобная «1-5-3», «1-5-3-2», «9-18-12» и так далее…
Я должен упорядочить по символу — первому символу, например, упорядочить по «1-«, «9-» и т. Д.
Я не хочу переписывать весь запрос с помощью необработанного sql. В Laravel я делаю:
orderBy(DB::raw(...sql))
но в EFCore я не могу найти решение.
Я знаю, как я могу переписать на стороне клиента (.AsEnumerable), но мне нужно написать запрос на стороне сервера.
Запрос должен быть упорядочен по первому символу в строке.
Ответ №1:
Ядро EF отлично переводит метод подстроки строки в SQL, но для этого требуется перегрузка 2 параметров. Итак, если я правильно понял ваш вопрос — «как упорядочить запрос только по первому символу» — используйте:
return await _context.Rubrics
.AsNoTracking()
.Where(i => i.IsApproved == true)
.Include(i => i.EdDraft)
.Include(i => i.Rubric)
.ThenInclude(i => i.Title)
.Where(i => i.EdDraft.AccountId == accountId)
.OrderBy(i => i.Path.Substring(0,1))
.ToListAsync();