LINQ: PredicateBuilder

Теория и практика | создано: 12.04.2021 | опубликовано: 12.04.2021 | обновлено: 13.01.2024 | просмотров: 1407

Ключевые понятия: LINQ, выражения, PredicateBuilder, predicate, nuget

О видео

В этом видео покажу несколько примеров использования PreducatesBuilder, который позволяет формировать выражения для LINQ-запросов. От простого к сложному. Максимально доступно и понятно.

Видео

Исходные тексты

// Step1
void Main()
{
    var people = People.GetPeople();
    people.Dump();    
}

// Step2
void Main()
{
    var people = People.GetPeople();
    
    var countries = people
        .Select(x => x.Country)
        .Distinct();
    
    countries.Dump();
}

// Step3
void Main()
{
    var people = People.GetPeople();
    var countries = people.Where(x => x.Country == Country.Russia);
        
    countries.Dump();
}

// Step4
void Main()
{
    // Install Calabonga.PredicateBuilder
    
    var people = People.GetPeople();

    var predicate = PredicateBuilder
        .True<Person>()
        .And(x => x.Country == Country.Russia);
        
    var queryWhere = predicate.Compile();

    var countries = people.Where(queryWhere);
    countries.Dump();
}

// Step 5
void Main()
{
    var people = People.GetPeople();

    var countries = Enum.GetValues(typeof(Country));
    
    "Select a country:".Dump("Oprions");

    foreach (var enumItem in countries)
    {
        Console.WriteLine($"{(int)enumItem}: {enumItem}");
    }

    var country = Console.ReadLine();

    var parsed = Enum.TryParse(country, out Country selectedCountry);

    var predicate = PredicateBuilder.True<Person>();
    if (parsed)
    {
        predicate = predicate.And(x => x.Country == selectedCountry || x.Country == Country.Russia);
    }

    var queryWhere = predicate.Compile();

    var filteredPerson = people.Where(queryWhere);
    filteredPerson.Dump();
}

Ссылки

https://www.nuget.org/packages/Calabonga.PredicatesBuilder/
https://www.nuget.org/packages/Calabonga.DemoClasses/

Поблагодарить

Хотите тоже получать донаты? Тогда заходите на boosty.to и регистрируйтесь!

Кстати, я использую хостинг reg.ru. Подключайся с промокодом 9A17-953A-8591-CF98.

Мои видео

Boosty.toYouTube | Yandex.Дзен | RuTube | VK | Nuum.ru