CSHARPPROGLIB Telegram 6386
⚡️ Динамическая сортировка в EF Core

Представьте: у вас API со списком заказов. Клиент может сортировать по любому полю через параметры запроса. Без динамики пришлось бы писать switch на все варианты:
IQueryable<Order> query = context.Orders;

query = sortBy switch
{
"total_asc" => query.OrderBy(o => o.TotalAmount),
"total_desc" => query.OrderByDescending(o => o.TotalAmount),
"date_asc" => query.OrderBy(o => o.CreatedAt),
"date_desc" => query.OrderByDescending(o => o.CreatedAt),
// ещё 20 полей...
};


С динамической сортировкой код становится лаконичным:
var orders = context.Orders
.Where(o => o.Status == OrderStatus.Completed)
.OrderBy("TotalAmount DESC")
.ThenBy("CreatedAt ASC");


Имя поля и направление сортировки передаются строкой. Всё остается IQueryable — запрос уходит в базу, а не выполняется в памяти.

Можно комбинировать несколько уровней сортировки, передавая массив строк от клиента.

Если строка сортировки приходит от пользователя, нужна валидация. Иначе можно получить exception на несуществующем поле или, хуже, уязвимость.

Попробовать либу:
dotnet add package System.Linq.Dynamic.Core


🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔109👍2



tgoop.com/csharpproglib/6386
Create:
Last Update:

⚡️ Динамическая сортировка в EF Core

Представьте: у вас API со списком заказов. Клиент может сортировать по любому полю через параметры запроса. Без динамики пришлось бы писать switch на все варианты:

IQueryable<Order> query = context.Orders;

query = sortBy switch
{
"total_asc" => query.OrderBy(o => o.TotalAmount),
"total_desc" => query.OrderByDescending(o => o.TotalAmount),
"date_asc" => query.OrderBy(o => o.CreatedAt),
"date_desc" => query.OrderByDescending(o => o.CreatedAt),
// ещё 20 полей...
};


С динамической сортировкой код становится лаконичным:
var orders = context.Orders
.Where(o => o.Status == OrderStatus.Completed)
.OrderBy("TotalAmount DESC")
.ThenBy("CreatedAt ASC");


Имя поля и направление сортировки передаются строкой. Всё остается IQueryable — запрос уходит в базу, а не выполняется в памяти.

Можно комбинировать несколько уровней сортировки, передавая массив строк от клиента.

Если строка сортировки приходит от пользователя, нужна валидация. Иначе можно получить exception на несуществующем поле или, хуже, уязвимость.

Попробовать либу:
dotnet add package System.Linq.Dynamic.Core


🐸 Библиотека шарписта

#sharp_view

BY Библиотека шарписта | C#, F#, .NET, ASP.NET




Share with your friend now:
tgoop.com/csharpproglib/6386

View MORE
Open in Telegram


Telegram News

Date: |

1What is Telegram Channels? 2How to set up a Telegram channel? (A step-by-step tutorial) Hui said the messages, which included urging the disruption of airport operations, were attempts to incite followers to make use of poisonous, corrosive or flammable substances to vandalize police vehicles, and also called on others to make weapons to harm police. ZDNET RECOMMENDS Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp.
from us


Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET
FROM American