LINQ: PredicateBuilder

Видео | создано: 4/12/2021 | опубликовано: 4/12/2021 | обновлено: 11/15/2022 | просмотров: 773

Ключевые понятия: 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/

Стать спонсором:
https://www.youtube.com/channel/UCWqjyIe9-ukFyG7I3eMVt4A/join

Благодарности помощь каналу принимаются:
https://www.calabonga.net/site/thanks