Cross.DataFilter
1.0.1
dotnet add package Cross.DataFilter --version 1.0.1
NuGet\Install-Package Cross.DataFilter -Version 1.0.1
<PackageReference Include="Cross.DataFilter" Version="1.0.1" />
<PackageVersion Include="Cross.DataFilter" Version="1.0.1" />
<PackageReference Include="Cross.DataFilter" />
paket add Cross.DataFilter --version 1.0.1
#r "nuget: Cross.DataFilter, 1.0.1"
#addin nuget:?package=Cross.DataFilter&version=1.0.1
#tool nuget:?package=Cross.DataFilter&version=1.0.1
Cross.DataFilter
A lightweight .NET library designed to simplify data filtering, sorting, and pagination in Entity Framework Core applications. The library provides a robust set of tools for handling common data access patterns with a focus on performance and extensibility.
Main Features:
Advanced Pagination
- Efficient query pagination with skip/take operations
- Support for both IQueryable and IEnumerable collections
- Built-in page size and count tracking
Dynamic Sorting
- Attribute-based sorting configuration
- Multi-level property sorting
- Case-insensitive string comparison
- Support for complex object sorting
AutoComplete Support
- Ready-to-use autocomplete query handlers
- Built-in pagination for large datasets
- Configurable ordering
- Support for grouped results
Flexible Architecture
- CQRS-friendly design
- Integration with MediatR
- Extensible query handlers
- Support for custom filtering logic
The library is particularly useful for building modern web applications that require efficient data handling with minimal boilerplate code.
Install with nuget.org:
https://www.nuget.org/packages/Cross.DataFilter
Installation
Clone repository or Install Nuget Package
Install-Package Cross.DataFilter
Quick Start
Basic Pagination Query
public class MyPaginatedQuery : PaginatedItemsQuery<MyFilter, MyEntity>
{
public MyPaginatedQuery(MyFilter request)
: base(request) { }
}
AutoComplete Implementation
public class MyAutoCompleteQuery : AutoCompleteQuery
{
public MyAutoCompleteQuery(int? page, int? pageSize, MyFilter filter)
: base(page, pageSize, filter) { }
}
Configuration
Basic Setup
services.AddCrossDataFilter();
Issues and Pull Request
Contribution is welcomed. If you would like to provide a PR please add some testing.
How To's
Please use Wiki for documentation and usage examples.
Complete usage examples can be found in the test project
Note - test project is not a part of nuget package. You have to clone repository.
Roadmap:
Memory Optimization
- Large dataset optimization
- Общая оптимизация для больших наборов данных:
- Эффективные SQL запросы
- Правильное использование индексов
- Оптимизация JOIN операций
- Эффективные стратегии подсчета общего количества записей
- Асинхронная загрузка данных
- Умное кэширование результатов
- Общая оптимизация для больших наборов данных:
- Streaming results for large datasets
- Специфический подход обработки данных:
- Потоковая передача данных без загрузки всего набора в память
- Использование yield return для постепенной обработки
- Server-Sent Events для real-time передачи
- Чтение данных частями (batch processing)
- Специфический подход обработки данных:
- Parallel query support
- Параллельное выполнение запросов для повышения производительности:
- Распараллеливание тяжелых операций фильтрации
- Concurrent выполнение агрегаций
- Асинхронная загрузка связанных данных
- Балансировка нагрузки между потоками
- Контроль за количеством параллельных запросов
- Параллельное выполнение запросов для повышения производительности:
- Query profiling
- Анализ и оптимизация производительности запросов:
- Измерение времени выполнения запросов
- Отслеживание используемых ресурсов
- Анализ планов выполнения
- Выявление узких мест
- Сбор метрик для разных типов запросов
- Логирование проблемных паттернов
- Анализ и оптимизация производительности запросов:
- Memory-efficient data structures
- Фокус на выборе структур данных:
- Использование ArrayPool<T> вместо обычных массивов
- Применение Span<T>/Memory<T> для работу с памятью без аллокаций
- Структуры вместо классов где это уместно
- Использование компактных коллекций (например, BitArray вместо bool[])
- Фокус на выборе структур данных:
- Memory usage optimization
- Фокус на эффективном использовании памяти:
- Правильное управление жизненным циклом объектов
- Своевременное освобождение ресурсов
- Оптимизация размера кэша
- Контроль за утечками памяти
- Мониторинг общего потребления памяти
- Уменьшение пиковых нагрузок на память
- Фокус на эффективном использовании памяти:
- Garbage collection optimization
- Фокус на настройке работы сборщика мусора:
- Выбор подходящего режима GC (Server/Workstation)
- Настройка поколений GC
- Оптимизация частоты сборок
- Управление размером Large Object Heap
- Настройка порогов для разных поколений
- Минимизация фрагментации кучи
AutoComplete
- Customizable search algorithms
- Performance improvements
Filtering
- Dynamic filters
- Важная и базовая функциональность:
- Создание фильтров "на лету"
- Изменение условий фильтрации без перезагрузки
- UI для интерактивного построения фильтров
- Это основа современной системы фильтрации
- Важная и базовая функциональность:
- Composite conditions
- Необходимо для сложной фильтрации:
- Комбинирование условий через AND/OR
- Группировка условий в скобках
- Пример: (Status = 'Active' AND Price > 100) OR (IsSpecial = true)
- Нужно если простых фильтров недостаточно
- Необходимо для сложной фильтрации:
- Custom comparison operators
- Может быть избыточным:
- Стандартных операторов (=, >, <, !=, LIKE) часто достаточно
- Имеет смысл только при специфичных требованиях
- Пример: геопространственные операторы, специальные текстовые сравнения
- Можно отложить или убрать, если нет особых требований
- Может быть избыточным:
- Nested property filters
- Зависит от структуры данных:
- Нужно если у вас сложные объекты с вложенностью
- Пример: User.Address.City или Order.Items[].Product.Category
- Необходимо только при работе со сложными объектами
- Зависит от структуры данных:
Sorting
- Multi-level sorting
- Важная базовая функциональность:
- Сортировка по нескольким полям одновременно
- Пример: сначала по статусу, потом по дате, потом по имени
- Разные направления сортировки для разных полей
- Это стандартное требование для современных таблиц
- Важная базовая функциональность:
- Nested property sorting
- Зависит от структуры данных:
- Нужно при работе со сложными объектами
- Пример: сортировка по User.Profile.LastName
- Полезно при связанных данных
- Необходимо только при наличии вложенных объектов
- Зависит от структуры данных:
- Custom comparators
- Может быть избыточным:
- Стандартных компараторов часто достаточно
- Нужно для специальных случаев:
- Сложная логика сравнения
- Специфичные бизнес-правила
- Кастомный порядок сортировки
- Можно отложить до появления особых требований
- Может быть избыточным:
- Sort expression building
- Зависит от реализации:
- Построение динамических выражений сортировки
- Преобразование UI-команд в выражения для БД
- Интеграция с ORM или другими системами
- Техническая необходимость зависит от архитектуры
- Зависит от реализации:
Database Integration
- EF Core optimization
- MongoDB support
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
- Cross.CQRS (>= 10.1.3)
- Microsoft.AspNetCore.Mvc.Core (>= 2.3.0)
- Microsoft.EntityFrameworkCore (>= 8.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
1.0.1 | 50 | 7/6/2025 |
1.0.1-preview.1 | 36 | 7/6/2025 |
Initial version.