MatcherKit 8.6.4
dotnet add package MatcherKit --version 8.6.4
NuGet\Install-Package MatcherKit -Version 8.6.4
<PackageReference Include="MatcherKit" Version="8.6.4" />
<PackageVersion Include="MatcherKit" Version="8.6.4" />
<PackageReference Include="MatcherKit" />
paket add MatcherKit --version 8.6.4
#r "nuget: MatcherKit, 8.6.4"
#:package MatcherKit@8.6.4
#addin nuget:?package=MatcherKit&version=8.6.4
#tool nuget:?package=MatcherKit&version=8.6.4
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 | 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. |
-
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.