WhereW .NET istnieje wiele technik do iteracji i wybierania danych z kolekcji. Najlepszym wynalazkiem C# jest LINQ.

Zostałem poproszony o stworzenie prostego przykładu LINQ, który by po prostu pobierałby elementy kolekcji w zależności od naszych potrzeb. Nie mam dużo czasu by się rozpisywać więc pomyślałem czemu nie.

Ten wpis jest przeznaczony całkowicie dla początkujących.

W tym przykładzie stworze klasę “Person” z następującymi właściwościami. [Imię , Kraj, Płeć i Wiek]

enum Gender
{
    Male,
    Female
}

class Person
{
    public string Name { set; get; }

    public string Country { set; get; }

    public Gender Sex { set; get; }

    public int Age { set; get; }
}

Do testowania selekcjonowania kolekcji potrzebujemy oczywiście samej kolekcji. Oto metoda tworząca kolekcję.

static List<Person> GetPersonCollection()
{
    List<Person> _persons = new List<Person>();

    _persons.Add(new Person()
    {
        Name = "Jacek",
        Age = 21,
        Sex = Gender.Male,
        Country = "US",
    });

    _persons.Add(new Person()
    {
        Name = "Darek",
        Age = 31,
        Sex = Gender.Male,
        Country = "US",
    });

    _persons.Add(new Person()
    {
        Name = "IKAZUKI",
        Age = 32,
        Sex = Gender.Male,
        Country = "JAPAN",

    });
    _persons.Add(new Person()
    {
        Name = "Yukidoh",
        Age = 15,
        Sex = Gender.Male,
        Country = "JAPAN",

    });
    _persons.Add(new Person()
    {
        Name = "Victoria",
        Age = 21,
        Sex = Gender.Female,
        Country = "UK",

    });
    return _persons;
}

Teraz gdy mamy kolekcję klasy “Person” możemy przejść do selekcjonowania danych.

Zadanie 1:

Wybierz wszystkie osoby płci męskiej.

List<Person> persons = GetPersonCollection();

var males = persons.Where(x => x.Sex == Gender.Male);

foreach (Person emp in males)
{
    Console.WriteLine(" Person Name {0},\tAge {1},\tSex {2},\tcountry {3}", emp.Name,
                                                emp.Age, emp.Sex, emp.Country);
}

W wyrażeniu where tworzy odpowiednie wyrażenie lambda, które określa warunek logiczny, który musi być spełniony w trakcie sortowania elementów.

Linq Where

Wynik kolekcji:

Wybierz wszystkie osoby płci męskiej

Zadanie 2:

Wybierz wszystkie osoby z kraju Japonia.

foreach (Person emp in GetPersonCollection().Where(x => x.Country == "JAPAN"))
{
    Console.WriteLine(" Person Name {0},\tAge {1},\tSex {2},\tcountry {3}",
                                    emp.Name, emp.Age, emp.Sex, emp.Country);

}

Analogicznie do poprzedniego przykładu tym razem jednak wybieramy właściwość Country i określamy, że musi się ona równać napisowi “Japan”.

Zauważ, że nie musi tworzyć zmiennej przed pętlą foreach możemy wyselekcjonować elementy w wyrażeniu “in”. Kolekcja na pewno zostanie wyselekcjonowana tylko raz.

Wybierz wszystkie osoby z kraju Japonia

Zadanie 3

Wybierz osoby, które są z US i mają więcej niż 26 lat.

foreach (Person emp in GetPersonCollection().Where(x => x.Country == "US" && x.Age > 26))
{
    Console.WriteLine(" Person Name {0},\tAge {1},\tSex {2},\tcountry {3}",
                                    emp.Name, emp.Age, emp.Sex, emp.Country);

}


Console.ReadLine();

Używając wyrażenia AND “&&’” możesz dodawać więcej ograniczeń.

Wybierz osoby, które są z US i mają więcej niż 26 lat

Zadanie 4:

Pogrupuj osoby według krajów i je wyświetl.

foreach (var empgrp in GetPersonCollection().GroupBy(x => x.Country).Select(x => new { x.Key, x }))
{
    Console.WriteLine("Country {0}", empgrp.Key);
    foreach (Person emp in empgrp.x)
        Console.WriteLine(" Person Name {0},\tAge {1},\tSex {2}", emp.Name, emp.Age, emp.Sex);
    Console.WriteLine();
}

Console.Read();

Wyrażenie GroupBy podniosło trochę poziom trudności tego wpisu, ale podobnie jak z wyrażeniem where określamy, po jakiej właściwości dane mają być pogrupowane.

Linq GroupBy

Potem wyrażenie select tworzy klasę anonimową zawierającą dwie właściwości: Klucz grupowania – “nazwa kraju” oraz cały obiekt klasy Person.

Iterujemy po obiektach tej klasy anonimowej i wyświetlamy klucz, jak i zbiór elementów drugiej właściwości, która zawiera kolekcję elementów Person pogrupowanej po nazwie danego kraju.

Używamy drugiej pętli foreach by wyświetlić pogrupowaną kolekcję elementów po kluczu.

Pogrupuj osoby według krajów i je wyświetl.

To były proste przykłady prawda Uśmiech