MatcherKit 8.6.4

dotnet add package MatcherKit --version 8.6.4
                    
NuGet\Install-Package MatcherKit -Version 8.6.4
                    
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="MatcherKit" Version="8.6.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MatcherKit" Version="8.6.4" />
                    
Directory.Packages.props
<PackageReference Include="MatcherKit" />
                    
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 MatcherKit --version 8.6.4
                    
#r "nuget: MatcherKit, 8.6.4"
                    
#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.
#:package MatcherKit@8.6.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MatcherKit&version=8.6.4
                    
Install as a Cake Addin
#tool nuget:?package=MatcherKit&version=8.6.4
                    
Install as a Cake Tool

MatchKit

Универсальный движок сопоставления объектов по правилам. Использует Reflection для поиска, фильтрации и ранжирования записей по набору критериев с поддержкой 12 операторов сравнения.

Установка

dotnet add package MatchKit

Или через NuGet Package Manager:

Install-Package MatchKit

Пространство имён

using MatchKit;

Модели данных

MatchRule

Определяет правило сопоставления для сравнения свойств объекта.

public class MatchRule
{
    public string PropertyName { get; }
    public string Operator { get; }
    public object? Value { get; }
    public int Weight { get; }

    public MatchRule(string propertyName, string op, object? value, int weight = 1)
}
Свойство Тип Описание
PropertyName string Имя свойства объекта для сравнения (через Reflection)
Operator string Оператор сравнения (см. таблицу ниже)
Value object? Значение для сравнения
Weight int Вес правила для скорингового поиска (по умолчанию 1)

MatchResult<T>

Результат скорингового поиска.

public class MatchResult<T>
{
    public T Item { get; set; }
    public double Score { get; set; }
    public List<string> MatchedRules { get; set; }
}
Свойство Тип Описание
Item T Найденный объект
Score double Оценка совпадения от 0 до 100
MatchedRules List<string> Список имён свойств, по которым найдено совпадение

Поддерживаемые операторы

Оператор Описание Пример значения
= Равно "Москва"
!= Не равно "Москва"
> Больше 1000
>= Больше или равно 1000
< Меньше 5000
<= Меньше или равно 5000
contains Содержит подстроку (без учёта регистра) "склад"
startswith Начинается с (без учёта регистра) "ООО"
regex Соответствует регулярному выражению "^[A-Z]{2}-\\d+"
between Попадает в диапазон. Числа: "1000-5000". Даты: "2024-01-01\|2024-12-31" (через \|) "1000-5000"
in Входит в список значений (через запятую, без учёта регистра) "Москва,Санкт-Петербург,Казань"
notempty Свойство не null и не пустая строка (значение Value не используется) null

Полный справочник API

Все методы находятся в статическом классе Matcher.

Matcher.FindMatches

Находит элементы, для которых выполняются ВСЕ правила (логическое И).

List<T> FindMatches<T>(IEnumerable<T> items, params MatchRule[] rules)
Параметр Тип Описание
items IEnumerable<T> Коллекция объектов для поиска
rules MatchRule[] Набор правил сопоставления

Возвращает: List<T> — список объектов, удовлетворяющих всем правилам.


Matcher.FindWithScore

Возвращает все элементы с оценкой совпадения (0-100%), отсортированные по убыванию оценки. Оценка рассчитывается на основе весов правил: сумма весов совпавших правил / общий вес * 100.

List<MatchResult<T>> FindWithScore<T>(IEnumerable<T> items, params MatchRule[] rules)
Параметр Тип Описание
items IEnumerable<T> Коллекция объектов для поиска
rules MatchRule[] Набор правил с весами

Возвращает: List<MatchResult<T>> — список результатов с оценками, отсортированный по убыванию Score.


Matcher.FindUnmatched

Находит элементы из первого списка, для которых нет соответствий во втором списке по ключу. Опционально фильтрует по возрасту записи (только записи старше указанного срока).

List<T> FindUnmatched<T, TMatch>(
    IEnumerable<T> items,
    IEnumerable<TMatch> matchedItems,
    string itemKey,
    string matchKey,
    TimeSpan? olderThan = null,
    string? dateProperty = null)
Параметр Тип Описание
items IEnumerable<T> Исходный список для поиска
matchedItems IEnumerable<TMatch> Список существующих соответствий
itemKey string Имя свойства-ключа в items
matchKey string Имя свойства-ключа в matchedItems
olderThan TimeSpan? Минимальный возраст записи (необязательный)
dateProperty string? Имя свойства с датой для фильтрации по возрасту

Возвращает: List<T> — элементы без соответствий.


Примеры использования

Пример 1. Фильтрация товаров по нескольким критериям с новыми операторами

using MatchKit;

var products = GetProducts();

// Используем regex, between, in и notempty
var rules = new[]
{
    new MatchRule("Category", "in", "Электроника,Бытовая техника"),
    new MatchRule("Price", "between", "1000-5000"),
    new MatchRule("SKU", "regex", @"^[A-Z]{2}-\d{4}$"),
    new MatchRule("Description", "notempty", null),
    new MatchRule("City", "in", "Москва,Санкт-Петербург,Казань")
};

var results = Matcher.FindMatches(products, rules);
Console.WriteLine($"Найдено: {results.Count} товаров");

Пример 2. Скоринговый поиск кандидатов с весами

using MatchKit;

var candidates = GetCandidates();

var rules = new[]
{
    new MatchRule("Experience", ">=", 3, weight: 3),
    new MatchRule("City", "=", "Москва", weight: 2),
    new MatchRule("Skills", "contains", "C#", weight: 5),
    new MatchRule("Email", "regex", @"^[\w.-]+@[\w.-]+\.\w+$", weight: 1),
    new MatchRule("Salary", "between", "80000-150000", weight: 2)
};

var scored = Matcher.FindWithScore(candidates, rules);
foreach (var r in scored.Where(x => x.Score > 50))
{
    Console.WriteLine($"{r.Item} — {r.Score}% (совпало: {string.Join(", ", r.MatchedRules)})");
}

Пример 3. Поиск необработанных заявок старше 7 дней

using MatchKit;

var allOrders = GetOrders();
var processedOrders = GetProcessedOrders();

// Заявки без обработки, созданные более 7 дней назад
var unmatched = Matcher.FindUnmatched(
    allOrders,
    processedOrders,
    itemKey: "OrderId",
    matchKey: "OrderId",
    olderThan: TimeSpan.FromDays(7),
    dateProperty: "CreatedDate"
);

Console.WriteLine($"Необработанных заявок старше 7 дней: {unmatched.Count}");
foreach (var order in unmatched)
{
    Console.WriteLine($"  Заявка #{order.OrderId} от {order.CreatedDate:dd.MM.yyyy}");
}

Лицензия

MIT

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.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MatcherKit:

Package Downloads
ISBuilder

Information System Builder — full toolkit for building .NET 8 WinForms applications with EF Core, SQL Server. Export, CRUD, forms, charts, auth, reports, validation, themes.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.6.4 93 4/12/2026
8.6.0 67 4/12/2026