Schreiben von Abfragen in C# LINQ

Schreiben Von Abfragen In C Linq



Ähnlich wie bei SQL ist es möglich, Abfragen in C# LINQ mithilfe der Abfragesyntax zu schreiben. Diese Abfragen werden in C#-Datenbankanwendungen im Web verwendet, um die Daten aus der Datenbank abzurufen und im Web für Drittbenutzer anzuzeigen. In diesem Leitfaden besprechen wir einige LINQ-Abfragen, die SQL ähneln. Dazu erstellen wir eine Listendatenquelle und wenden die darin enthaltenen Abfragen an.

Abfragesyntax:

Schauen wir uns die generische Syntax an:

aus Iterator In Datenquelle
wählen Iterator ;

Hier:







  1. Die Data_Source kann die Liste sein, die die Daten enthält.
  2. Der Iterator wird verwendet, um die Elemente aus der Data_Source abzurufen.

Datenquelle

In diesem gesamten Leitfaden verwenden wir die folgende Liste von Datensätzen als Datenquelle und alle Abfragen werden nur auf diese Datenquelle angewendet. Stellen Sie sicher, dass Sie diesen Code in Ihrer Umgebung ausführen und die Abfrageanweisungen nacheinander anhand der folgenden Beispiele ändern, die wir besprechen werden:



verwenden System ;
verwenden System.Collections.Generic ;
verwenden System.Linq ;
verwenden System.Collections ;

öffentlich Klasse Berechnungen
{
öffentlich statisch Leere Hauptsächlich ( )
{
// Listenerstellung
Länderpreise auflisten = neu Aufführen ( ) {

// 5 Datensätze zur Liste hinzufügen
neu Preise ( ) { Artikel = „Früchte“ ,Standort = 'USA' , Menge = 100 , kosten = 345,78 } ,
neu Preise ( ) { Artikel = „Nüsse“ ,Standort = 'Indien' , Menge = 200 , kosten = 3645,78 } ,
neu Preise ( ) { Artikel = 'Andere' ,Standort = 'VEREINIGTES KÖNIGREICH' , Menge = 500 , kosten = 90,68 } ,
neu Preise ( ) { Artikel = 'Öl' ,Standort = 'USA' , Menge = 100 , kosten = 345,78 } ,
neu Preise ( ) { Artikel = 'Peperoni' ,Standort = 'USA' , Menge = 10 , kosten = 67,89 } ,
} ;


für jede ( War ich In Länderpreise )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;
}
}
}
öffentlich Klasse Preise {
öffentlich Zeichenfolge Artikel { erhalten ; Satz ; }
öffentlich Zeichenfolge Standort { erhalten ; Satz ; }
öffentlich int Menge { erhalten ; Satz ; }
öffentlich doppelt kosten { erhalten ; Satz ; }
}

Aufzeichnungen:







Erläuterung:

1. Erstellen Sie die Preise mit den folgenden Attributen:

2. Erstellen Sie eine weitere Klasse „Berechnungen“ mit der Hauptmethode und erstellen Sie die Liste „country_prices“ mit fünf Datensätzen.



Wählen

Grundsätzlich ist „select“ ein Projektionsoperator, der die Attribute aus der angegebenen Datenquelle auswählt. Die Abfrage beginnt mit „von“. Anschließend geben wir den Iterator an, der die Datenquelle durchläuft. Anschließend wird der „select“-Operator angegeben.

Syntax:

Alle Attribute: Vom Iterator in Data_Source wählen Sie den Iterator aus;

Spezifisches Attribut: Wählen Sie vom Iterator in Data_Source iterator.attribute aus.

Beispiel 1:

Schreiben wir eine Abfrage, um alle Datensätze aus der Liste auszuwählen.

verwenden System ;
verwenden System.Collections.Generic ;
verwenden System.Linq ;
verwenden System.Collections ;

öffentlich Klasse Berechnungen
{
öffentlich statisch Leere Hauptsächlich ( )
{
// Listenerstellung
Länderpreise auflisten = neu Aufführen ( ) {

// 5 Datensätze zur Liste hinzufügen
neu Preise ( ) { Artikel = „Früchte“ ,Standort = 'USA' , Menge = 100 , kosten = 345,78 } ,
neu Preise ( ) { Artikel = „Nüsse“ ,Standort = 'Indien' , Menge = 200 , kosten = 3645,78 } ,
neu Preise ( ) { Artikel = 'Andere' ,Standort = 'VEREINIGTES KÖNIGREICH' , Menge = 500 , kosten = 90,68 } ,
neu Preise ( ) { Artikel = 'Öl' ,Standort = 'USA' , Menge = 100 , kosten = 345,78 } ,
neu Preise ( ) { Artikel = 'Peperoni' ,Standort = 'USA' , Menge = 10 , kosten = 67,89 } ,
} ;

//Operator in der Abfrage auswählen
War Daten = aus ich In Länderpreise
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}
}
}
öffentlich Klasse Preise {
öffentlich Zeichenfolge Artikel { erhalten ; Satz ; }
öffentlich Zeichenfolge Standort { erhalten ; Satz ; }
öffentlich int Menge { erhalten ; Satz ; }
öffentlich doppelt kosten { erhalten ; Satz ; }
}

Ausgang:

Hier haben wir in der „select“-Abfrage kein Attribut angegeben. Wir haben alle Attribute aus der Abfrage (Daten) innerhalb der „foreach“-Schleife mithilfe des Iterators abgerufen.

Beispiel 2:

Rufen Sie nun die Elemente ab, indem Sie das Elementattribut im „select“-Operator angeben. Die Abfrage lautet: „ von i in country_prices wählen Sie i.item aus “.

//Operator auswählen, um das Elementattribut in der Abfrage abzurufen
War Daten = aus ich In Länderpreise
wählen ich . Artikel ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich ) ;

}

Ausgang:

Zeile Nr. 21 – Zeile Nr. 29:

2. Wo

Wenn Sie die Daten basierend auf bestimmten Bedingungen filtern möchten, können Sie in der Abfrage den „where“-Operator zusammen mit der „select“-Klausel verwenden. Aber zuerst wird der „Where“-Operator verwendet und dann wird der Auswahloperator angegeben.

Syntax:

Sehen wir uns an, wie man den „where“-Operator in der LINQ-Abfrage verwendet.

aus Iterator In Datenquelle
Wo Zustand / S
wählen Iterator . Attribut ;

Beispiel 1: Einzelbedingung

Lassen Sie uns die Datensätze basierend auf dem Artikelattribut filtern. Verwenden Sie den Gleichheitsoperator (==) im „where“-Operator als Bedingung und vergleichen Sie den Iterator mit „Chillies“. Daher werden die Datensätze ausgewählt, die sich auf „Chilis“ beziehen.

Die Abfrage lautet „ von i in Country_prices
wobei i.item == „Chilis“
wähle „i“

//Wählen Sie aus, wo Datensätze gefiltert werden sollen
War Daten = aus ich In Länderpreise
Wo ich . Artikel == 'Peperoni'
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Es gibt nur einen Datensatz mit dem Eintrag „Chilis“.

Zeile Nr. 21 – Zeile Nr. 30:

Beispiel 2: Mehrere Bedingungen

Lassen Sie uns die Datensätze anhand der Standort- und Mengenattribute filtern. Die Menge sollte größer als 50 und kleiner als 300 sein. Der Standort sollte „USA“ sein.

Die Abfrage lautet „ von i in Country_prices
wobei i.quantity > 50 ist
wobei i.quantity < 300 ist
wobei i.location == „USA“
wähle „i“

//Wählen Sie aus, wo Datensätze gefiltert werden sollen, indem Sie mehrere Bedingungen angeben
War Daten = aus ich In Länderpreise
Wo ich . Menge > fünfzig
Wo ich . Menge < 300
Wo ich . Standort == 'USA'
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Es gibt zwei Datensätze, die den vorherigen Bedingungen entsprechen.

Zeile Nr. 21 – Zeile Nr. 32:

Beispiel 3: Und (&&) Operator

Wir können den Operator „und (&&)“ angeben, um mehrere Bedingungen gleichzeitig anzugeben. Wenn alle Bedingungen erfüllt sind, werden von der Abfrage die Datensätze zurückgegeben, die alle Bedingungen erfüllen.

In diesem Beispiel wählen wir die Datensätze aus, wenn die Menge größer als 20 ist und die Kosten 67,89 betragen.

Die Abfrage lautet „ von i in Country_prices
wobei i.quantity < 20 && i.cost == 67,89
wähle „i“

War Daten = aus ich In Länderpreise
Wo ich . Menge < zwanzig && ich . kosten == 67,89
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Es gibt nur einen Datensatz mit einer Menge von weniger als 20 und einem Preis von 67,89

Zeile Nr. 21 – Zeile Nr. 29:

Beispiel 4: Oder (||) Operator

Der Operator „oder (||)“ wird auch verwendet, um mehrere Bedingungen gleichzeitig anzugeben. Wenn mindestens eine Bedingung wahr ist, werden die Datensätze zurückgegeben, die diese Bedingung erfüllen.

In diesem Beispiel wählen wir die Datensätze aus, wenn die Menge größer als 300 ist oder der Standort „Tokio“ ist.

Die Abfrage lautet „ von i in Country_prices
wobei i.quantity > 300 || i.location == „Tokio“
wähle „i“

War Daten = aus ich In Länderpreise
Wo ich . Menge > 300 || ich . Standort == 'Tokio'
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Es gibt nur einen Datensatz mit einer Menge größer als 300 (die erste Bedingung ist erfüllt).

Zeile Nr. 21 – Zeile Nr. 29:

3. Bestellen nach

Wenn Sie die von der LINQ-Abfrage zurückgegebenen Datensätze basierend auf Werten in einem der Attribute in aufsteigender oder absteigender Reihenfolge anordnen möchten, können Sie in der Abfrage den Operator „Sortieren nach“ verwenden. Sie müssen diesen Operator vor dem „select“-Operator angeben.

Syntax:

Sehen wir uns an, wie der Operator „order by“ in der LINQ-Abfrage verwendet wird.

Aufsteigende Reihenfolge:

aus Iterator In Datenquelle
Befehl von Iterator . Attribut aufsteigend
wählen Iterator ;

Absteigende Reihenfolge:

aus Iterator In Datenquelle
Befehl von Iterator . Attribut absteigend
wählen Iterator ;

Beispiel 1: Aufsteigende Reihenfolge

Wählen Sie alle Attribute aus der Datenquelle (Liste) aus und geben Sie sie in aufsteigender Reihenfolge basierend auf den Werten im Mengenattribut zurück.

Die Abfrage lautet „ von i in Country_prices
orderby i.quantity aufsteigend
wähle „i“

War Daten = aus ich In Länderpreise
Bestellung nach i . Menge aufsteigend
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Zeile Nr. 21 – Zeile Nr. 29:

Beispiel 2: Absteigende Reihenfolge

Wählen Sie alle Attribute aus der Datenquelle (Liste) aus und geben Sie sie in absteigender Reihenfolge basierend auf den Werten im Kostenattribut zurück.

Die Abfrage lautet „ von i in Country_prices
Bestellung nach i.Kosten absteigend
wähle „i“

War Daten = aus ich In Länderpreise
Bestellung nach i . kosten absteigend
wählen ich ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

Ausgang:

Zeile Nr. 21 – Zeile Nr. 29:

4. Begrenzen

Limit in SQL begrenzt die Datensätze, die von der Abfrage zurückgegeben werden. Es gibt die obersten Datensätze zurück, die von der Abfrage zurückgegeben werden. In LINQ können wir dies erreichen, indem wir Skip() mit dem Take()-Operator verwenden. Take() ruft die angegebene Anzahl von Datensätzen ab. Skip() wird verwendet, um die Startdatensatznummer anzugeben. Auf diese Weise können wir die „Limit“-Funktionalität in LINQ erreichen.

Syntax:

( aus Iterator In Datenquelle
wählen Iterator ) . Überspringen ( N ) . Nehmen ( N ) ;
  1. Skip() wird verwendet, um die Datensätze zu überspringen und die verbleibenden Datensätze zurückzugeben. Es wird eine Ganzzahl benötigt, die die Anzahl der zu überspringenden Elemente angibt. In unserem Fall ist es 0.
  2. Take() wird verwendet, um „n“ Datensätze vom ersten Datensatz zu übernehmen.

Beispiel:

Wählen Sie die ersten drei Datensätze aus fünf Datensätzen aus, die von der Abfrage zurückgegeben werden.

Die Abfrage lautet „ (von i in Country_prices
wähle i).Skip(0).Take(3)“

War Daten = ( aus ich In Länderpreise
wählen ich ) . Überspringen ( 0 ) . Nehmen ( 3 ) ;

für jede ( War ich In Daten )
{
Konsole . WriteLine ( ich . Artikel + ' ' + ich . Standort + ' ' + ich . Menge + ' ' + ich . kosten ) ;

}

}

Ausgang:

Zeile Nr. 21 – Zeile Nr. 28:

Abschluss

Wir haben gelernt, wie man die Abfragen in C# LINQ schreibt, das SQL ähnelt. Im Rahmen dieses Tutorials haben wir besprochen, wie Sie mit dem „select“-Operator die Datensätze aus der Datenquelle auswählen. Um die von der Abfrage zurückgegebenen Datensätze zu filtern, haben wir den „where“-Operator verwendet, indem wir die Bedingungen angegeben haben. Anschließend haben wir gelernt, wie man die von der Abfrage zurückgegebenen Datensätze mit dem Operator „Sortieren nach“ sortiert. Um schließlich die Datensätze einzuschränken, haben wir die Operatoren Skip() und Take() verwendet.