Zoeken…


Invoering

LINQ naar objecten verwijst naar het gebruik van LINQ-query's met elke IEnumerable-verzameling.

Hoe LINQ to Object query's uitvoert

LINQ-zoekopdrachten worden niet onmiddellijk uitgevoerd. Wanneer u de query bouwt, slaat u de query eenvoudig op voor toekomstige uitvoering. Alleen wanneer u daadwerkelijk vraagt om de query te herhalen, wordt de query uitgevoerd (bijvoorbeeld in een for-lus, wanneer u ToList, Count, Max, Average, First, etc. aanroept)

Dit wordt beschouwd als uitgestelde uitvoering . Dit stelt u in staat om de query in meerdere stappen op te bouwen, mogelijk te wijzigen op basis van voorwaardelijke instructies en deze later pas uit te voeren als u het resultaat nodig hebt.

Gezien de code:

var query = from n in numbers 
            where n % 2 != 0
            select n;

Het bovenstaande voorbeeld slaat alleen de query in query variabel. Het voert de query zelf niet uit.

De instructie foreach dwingt de zoekopdracht uit te voeren:

foreach(var n in query) {
    Console.WriteLine($"Number selected {n}");
}

Sommige LINQ-methoden activeren ook de uitvoering van de query, Count , First , Max , Average . Ze retourneren enkele waarden. ToList en ToArray verzamelen resultaten en veranderen deze in respectievelijk een lijst of een array.

Houd er rekening mee dat u meerdere query's meerdere keren kunt doorlopen als u meerdere LINQ-functies voor dezelfde query aanroept. Dit kan u verschillende resultaten geven bij elk gesprek. Als u slechts met één gegevensset wilt werken, moet u deze in een lijst of array opslaan.

LINQ gebruiken voor objecten in C #

Een eenvoudige SELECT-zoekopdracht in Linq

static void Main(string[] args)
{
    string[] cars = { "VW Golf", 
                        "Opel Astra", 
                        "Audi A4", 
                        "Ford Focus", 
                        "Seat Leon", 
                        "VW Passat", 
                        "VW Polo", 
                        "Mercedes C-Class" };

    var list = from car in cars
               select car;

    StringBuilder sb = new StringBuilder();

    foreach (string entry in list)
    {
        sb.Append(entry + "\n");
    }

    Console.WriteLine(sb.ToString());
    Console.ReadLine();
}

In het bovenstaande voorbeeld wordt een reeks strings (auto's) gebruikt als een verzameling objecten die met LINQ kunnen worden opgevraagd. In een LINQ-query komt de van-clausule eerst om de gegevensbron (auto's) en de bereikvariabele (auto) te introduceren. Wanneer de query wordt uitgevoerd, dient de bereikvariabele als referentie voor elk opeenvolgend element in auto's. Omdat de compiler het type auto kan afleiden, hoeft u dit niet expliciet op te geven

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op: voer hier de afbeeldingsbeschrijving in

SELECTEER met een WHERE-clausule

var list = from car in cars
           where car.Contains("VW")
           select car;

De WHERE-component wordt gebruikt om de stringarray (auto's) te doorzoeken om een subset van een array te vinden en te retourneren die voldoet aan de WHERE-component.

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op:

voer hier de afbeeldingsbeschrijving in

Een geordende lijst genereren

var list = from car in cars
           orderby car ascending 
           select car;

Soms is het handig om de geretourneerde gegevens te sorteren. De orderby-clausule zorgt ervoor dat de elementen worden gesorteerd volgens de standaardvergelijker voor het type dat wordt gesorteerd.

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op:

voer hier de afbeeldingsbeschrijving in

Werken met een aangepast type

In dit voorbeeld wordt een getypte lijst gemaakt, ingevuld en vervolgens opgevraagd

public class Car
{
    public String Name { get; private set; }
    public int UnitsSold { get; private set; }

    public Car(string name, int unitsSold)
    {
        Name = name;
        UnitsSold = unitsSold;
    }
}

class Program
{
    static void Main(string[] args)
    {

        var car1 = new Car("VW Golf", 270952);
        var car2 = new Car("Opel Astra", 56079);
        var car3 = new Car("Audi A4", 52493);
        var car4 = new Car("Ford Focus", 51677);
        var car5 = new Car("Seat Leon", 42125);
        var car6 = new Car("VW Passat", 97586);
        var car7 = new Car("VW Polo", 69867);
        var car8 = new Car("Mercedes C-Class", 67549);

        var cars = new List<Car> { 
            car1, car2, car3, car4, car5, car6, car7, car8 };
        var list = from car in cars
                   select car.Name;

        foreach (var entry in list)
        {
            Console.WriteLine(entry);
        }
        Console.ReadLine();
    }
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op:

voer hier de afbeeldingsbeschrijving in

Tot nu toe lijken de voorbeelden niet geweldig, omdat je gewoon door de array kunt bladeren om in wezen hetzelfde te doen. Met de enkele voorbeelden hieronder kunt u echter zien hoe u complexere query's kunt maken met LINQ naar objecten en meer kunt bereiken met veel minder code.

In het onderstaande voorbeeld kunnen we auto's selecteren die meer dan 60000 eenheden hebben verkocht en deze sorteren op het aantal verkochte eenheden:

var list = from car in cars
           where car.UnitsSold > 60000 
           orderby car.UnitsSold descending 
           select car;

StringBuilder sb = new StringBuilder();

foreach (var entry in list)
{
    sb.AppendLine($"{entry.Name} - {entry.UnitsSold}");
}
Console.WriteLine(sb.ToString());

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op: voer hier de afbeeldingsbeschrijving in

In het onderstaande voorbeeld kunnen we auto's selecteren die een oneven aantal eenheden hebben verkocht en deze alfabetisch op zijn naam bestellen:

var list = from car in cars
           where car.UnitsSold % 2 != 0 
           orderby car.Name ascending 
           select car;

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op: voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow