Cross.DataFilter 1.0.1-preview.1

This is a prerelease version of Cross.DataFilter.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Cross.DataFilter --version 1.0.1-preview.1
                    
NuGet\Install-Package Cross.DataFilter -Version 1.0.1-preview.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Cross.DataFilter" Version="1.0.1-preview.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Cross.DataFilter" Version="1.0.1-preview.1" />
                    
Directory.Packages.props
<PackageReference Include="Cross.DataFilter" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Cross.DataFilter --version 1.0.1-preview.1
                    
#r "nuget: Cross.DataFilter, 1.0.1-preview.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Cross.DataFilter&version=1.0.1-preview.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Cross.DataFilter&version=1.0.1-preview.1&prerelease
                    
Install as a Cake Tool

Nuget Documentation

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.