Linq w C#

Wyrażenia Linq są wykonywane wtedy, kiedy zachodzi potrzeba wykorzystania danych.(Linq querry)

Wybór liczb parzystych z kolekcji

int[] numbers = { 12, 3, 45, 23, 22, 18, 98, 67 };
var evenNums = numbers.Where(number => number % 2 == 0);
Console.WriteLine(string.Join(",", evenNums));

Sortowanie liczb w LINQ C#

int[] numbers = { 12, 3, 45, 23, 22, 18, 98, 67 };
var sortedNums = numbers.OrderBy(number => number);
Console.WriteLine(string.Join(",", sortedNums));

Łączenie wyrażeń LINQ do posortowania liczb parzystych z kolekcji

int[] numbers = { 12, 3, 45, 23, 22, 18, 98, 67 };
var sortedNums = numbers
    .Where(number=>number%2 == 0)
    .OrderBy(number => number);
Console.WriteLine(string.Join(",", sortedNums));

Wybór krótkich imion z kolekcji

string[] names = { "Jo", "Jen", "Anna", "Roman", "Eli", "Jannet" };
var shortNames = names.Where(name=>name.Length <= 3);
Console.WriteLine(string.Join(",", shortNames));

Wybór imion zaczynających się od litery J

string[] names = { "Jo", "Jen", "Anna", "Roman", "Eli", "Jannet" };
var jNames = names.Where(name=>name.StartsWith('J'));
Console.WriteLine(string.Join(",", jNames));

Any – zwraca true jeśli jakakolwiek liczba z kolekcji będzie większa od 44

int[] numbers = { 12, 3, 45, 23, 22, 18, 41, 36 };
bool isLarger = numbers.Any(x => x > 44);
Console.WriteLine(isLarger);

All – zwraca true jeśli wszystkie elementy kolekcji spełniają warunek

Count – zwraca ilość elementów spełniających warunki

string[] names = { "Jo", "Jen", "Anna", "Roman", "Eli", "Jannet" };
var jNames = names.Count(name => name.StartsWith('J') && name.Length > 3);
Console.WriteLine(jNames);

Contains – zwraca true jeśli element znajduje się w kolekcji

string[] names = { "Jo", "Jen", "Anna", "Roman", "Eli", "Jannet" };
var jNames = names.Contains("Jo");
Console.WriteLine(jNames);

OrderBy – porządkuje kolekcję względem podanego parametru

Car[] cars = {
    new("Ford", 280, 6.2),
    new("Mazda", 270, 2.5),
    new("Honda", 260, 2.4),
    new("Fiat", 180, 1.5),
    new("Opel", 200, 2.0),
    new("Mercedes", 260, 4.2),
    new("Bmw", 280, 3.0)
};
var carsOrder = cars.OrderBy(car=>car.Brand);
Console.WriteLine(nameof(cars));
foreach (var car in carsOrder)
{
    Console.WriteLine($"{car.Brand} - {car.MaxSpeed}, {car.EngineSize}");
}

public class Car
{
    public string Brand { get; set; }
    public int MaxSpeed { get; set; }
    public double EngineSize { get; set; }

    public Car(string brand, int maxSpeed, double engineSize)
    {
        Brand = brand;
        MaxSpeed = maxSpeed;
        EngineSize = engineSize;
    }

}

Łączenie warunków przez ThenBy:

var carsOrder = cars.OrderBy(car => car.MaxSpeed).ThenBy(car=>car.EngineSize);

OrderByDescending

int[] numbers = { 12, 3, 45, 23, 22, 18, 41, 36 };
var numsDesc = numbers.OrderByDescending(x => x);
Console.WriteLine(string.Join(",", numsDesc));

First and Last

// Pierwsza liczba nieparzysta w kolekcji
int[] numbers = { 12, 6, 45, 23, 22, 18, 41, 36 };
var num = numbers.First(x => x%2 ==1);
Console.WriteLine(num);

Wybór elementów spełniających warunek o podanym w tablicy indeksie Linq

Car[] cars = {
    new("Ford", 280, 6.2),
    new("Mazda", 270, 2.5),
    new("Honda", 260, 2.4),
    new("Fiat", 180, 1.5),
    new("Opel", 200, 2.0),
    new("Mercedes", 260, 4.2),
    new("Bmw", 280, 3.0),
    new("Hyundai", 250, 1.8),
    new("Nissan", 320, 5.6)
};

int[] pickedCars = { 0, 1, 2, 8 };

var carsWhere = cars.Where((car, pick) => car.MaxSpeed>270
    && pickedCars.Contains(pick));

foreach (var car in carsWhere)
{
    Console.WriteLine($"{car.Brand} - {car.MaxSpeed}, {car.EngineSize}");
}

public class Car
{
    public string Brand { get; set; }
    public int MaxSpeed { get; set; }
    public double EngineSize { get; set; }

    public Car(string brand, int maxSpeed, double engineSize)
    {
        Brand = brand;
        MaxSpeed = maxSpeed;
        EngineSize = engineSize;
    }

}

Distinct zwraca kolekcję bez duplikatów

int[] numbers = { 12, 3, 45, 3, 12, 23, 22, 18, 41, 36 };
var numsDistinct = numbers.Distinct();
Console.WriteLine(string.Join(",", numsDistinct));

Select

//Zwiększa elementy tablicy x10
int[] numbers = { 12, 3, 45, 23, 22, 18, 41, 36 };
var nums = numbers.Select(num=>num*10);
Console.WriteLine(string.Join(",", nums));

Pobieranie jednego typu danych z obiektu do kolekcji

Car[] cars = {
    new("Ford", 280, 6.2),
    new("Mazda", 270, 2.5),
    new("Honda", 260, 2.4),
    new("Fiat", 180, 1.5),
    new("Opel", 200, 2.0),
    new("Mercedes", 260, 4.2),
    new("Bmw", 280, 3.0),
    new("Hyundai", 250, 1.8),
    new("Nissan", 320, 5.6)
};


var carsSelect = cars.Select(car => car.Brand);
Console.WriteLine(string.Join(",", carsSelect));


public class Car
{
    public string Brand { get; set; }
    public int MaxSpeed { get; set; }
    public double EngineSize { get; set; }

    public Car(string brand, int maxSpeed, double engineSize)
    {
        Brand = brand;
        MaxSpeed = maxSpeed;
        EngineSize = engineSize;
    }

}

Średnia wartość liczb bez null

var heights = new List<Nullable<int>> { 180, null, 177, 168, null, 181 };

var average = heights
    .Where(h => h is not null)
    .Average();
// lub prosciej bez sprawdzania null poniewaz Average i tak pominie wartosci null
var average = heights
    .Average();


Console.WriteLine(average);
Scroll to Top