Rédaction de requêtes en C# LINQ

Redaction De Requetes En C Linq



Semblable à SQL, il est possible d'écrire des requêtes en C# LINQ en utilisant la syntaxe de requête. Ces requêtes sont utilisées dans les applications de base de données C # sur le Web pour obtenir les données de la base de données et les afficher sur le Web pour les utilisateurs tiers. Dans ce guide, nous aborderons certaines requêtes LINQ similaires à SQL. Pour cela, nous allons créer une source de données de liste et y appliquer les requêtes.

Syntaxe de la requête :

Regardons la syntaxe générique :

depuis itérateur dans La source de données
sélectionner itérateur ;

Ici:







  1. Le Data_Source peut être la liste qui contient les données.
  2. L'itérateur est utilisé pour récupérer les éléments du Data_Source.

La source de données

Dans l'ensemble de ce guide, nous utiliserons la liste d'enregistrements suivante comme source de données et toutes les requêtes sont appliquées sur cette source de données uniquement. Assurez-vous que vous exécutez ce code dans votre environnement et modifiez les instructions de requête avec les exemples suivants un par un dont nous allons discuter :



en utilisant Système ;
en utilisant System.Collections.GenericSystem.Collections.Generic ;
en utilisant System.Linq ;
en utilisant System.Collections ;

public classe Calculs
{
public statique annuler Principal ( )
{
// Création de liste
Liste country_prices = nouveau Liste ( ) {

// Ajouter 5 enregistrements dans la liste
nouveau Des prix ( ) { article = 'Fruits' ,emplacement = 'ETATS-UNIS' , quantité = 100 , coût = 345,78 } ,
nouveau Des prix ( ) { article = 'Des noisettes' ,emplacement = 'Inde' , quantité = 200 , coût = 3645.78 } ,
nouveau Des prix ( ) { article = 'Autres' ,emplacement = 'ROYAUME-UNI' , quantité = 500 , coût = 90,68 } ,
nouveau Des prix ( ) { article = 'huile' ,emplacement = 'ETATS-UNIS' , quantité = 100 , coût = 345,78 } ,
nouveau Des prix ( ) { article = 'Piments' ,emplacement = 'ETATS-UNIS' , quantité = dix , coût = 67,89 } ,
} ;


pour chaque ( était je dans country_prices )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;
}
}
}
public classe Des prix {
public chaîne article { obtenir ; ensemble ; }
public chaîne emplacement { obtenir ; ensemble ; }
public entier quantité { obtenir ; ensemble ; }
public double coût { obtenir ; ensemble ; }
}

Enregistrements :







Explication:

1. Créez les prix avec les attributs suivants :

2. Créez une autre classe qui est 'Calculs' avec la méthode principale et créez la liste country_prices avec cinq enregistrements.



Sélectionner

Fondamentalement, 'select' est un opérateur de projection qui sélectionne les attributs de la source de données spécifiée. La requête commence par 'depuis'. Ensuite, nous spécifions l'itérateur qui itère sur la source de données. Ensuite, l'opérateur 'select' est spécifié.

Syntaxe:

Tous les attributs : from iterator in Data_Source select iterator ;

Attribut spécifique : à partir de l'itérateur dans Data_Source, sélectionnez iterator.attribute ;

Exemple 1:

Écrivons une requête pour sélectionner tous les enregistrements de la liste.

en utilisant Système ;
en utilisant System.Collections.GenericSystem.Collections.Generic ;
en utilisant System.Linq ;
en utilisant System.Collections ;

public classe Calculs
{
public statique annuler Principal ( )
{
// Création de liste
Liste country_prices = nouveau Liste ( ) {

// Ajouter 5 enregistrements dans la liste
nouveau Des prix ( ) { article = 'Fruits' ,emplacement = 'ETATS-UNIS' , quantité = 100 , coût = 345,78 } ,
nouveau Des prix ( ) { article = 'Des noisettes' ,emplacement = 'Inde' , quantité = 200 , coût = 3645.78 } ,
nouveau Des prix ( ) { article = 'Autres' ,emplacement = 'ROYAUME-UNI' , quantité = 500 , coût = 90,68 } ,
nouveau Des prix ( ) { article = 'huile' ,emplacement = 'ETATS-UNIS' , quantité = 100 , coût = 345,78 } ,
nouveau Des prix ( ) { article = 'Piments' ,emplacement = 'ETATS-UNIS' , quantité = dix , coût = 67,89 } ,
} ;

//opérateur select dans la requête
était données = depuis je dans country_prices
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}
}
}
public classe Des prix {
public chaîne article { obtenir ; ensemble ; }
public chaîne emplacement { obtenir ; ensemble ; }
public entier quantité { obtenir ; ensemble ; }
public double coût { obtenir ; ensemble ; }
}

Sortir:

Ici, nous n'avons spécifié aucun attribut dans la requête 'select'. Nous avons récupéré tous les attributs de la requête (données) à l'intérieur de la boucle 'foreach' à l'aide de l'itérateur.

Exemple 2 :

Maintenant, obtenez les éléments en spécifiant l'attribut d'élément dans l'opérateur 'select'. La requête est ' de i dans country_prices sélectionnez i.item ”.

// opérateur de sélection pour obtenir l'attribut d'élément dans la requête
était données = depuis je dans country_prices
sélectionner je . article ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je ) ;

}

Sortir:

Ligne # 21 – Ligne # 29 :

2. Où

Si vous souhaitez filtrer les données en fonction de certaines conditions, vous pouvez utiliser l'opérateur 'where' dans la requête avec la clause 'select'. Mais l'opérateur 'où' est utilisé en premier, puis l'opérateur de sélection est spécifié.

Syntaxe:

Voyons comment utiliser l'opérateur 'where' dans la requête LINQ.

depuis itérateur dans La source de données
condition / s
sélectionner itérateur . attribut ;

Exemple 1: Condition unique

Filtrons les enregistrements en fonction de l'attribut de l'élément. Utilisez l'opérateur égal à (==) dans l'opérateur 'où' comme condition et comparez l'itérateur avec 'Chillies'. Ainsi, les enregistrements liés à « Piments » sont sélectionnés.

La requête est ' à partir de i dans country_prices
où i.item == 'Piments'
sélectionnez-moi »

//sélectionner avec où filtrer les enregistrements
était données = depuis je dans country_prices
je . article == 'Piments'
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Il n'y a qu'un seul enregistrement avec l'item « Piments ».

Ligne # 21 – Ligne # 30 :

Exemple 2 : Conditions multiples

Filtrons les enregistrements en fonction des attributs d'emplacement et de quantité. La quantité doit être supérieure à 50 et inférieure à 300. L'emplacement doit être 'USA'.

La requête est ' à partir de i dans country_prices
où i.quantité > 50
où i.quantité < 300
où i.location == 'États-Unis'
sélectionnez-moi »

//sélectionner avec où filtrer les enregistrements en spécifiant plusieurs conditions
était données = depuis je dans country_prices
je . quantité > cinquante
je . quantité < 300
je . emplacement == 'ETATS-UNIS'
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Deux enregistrements correspondent aux conditions précédentes.

Ligne # 21 – Ligne # 32 :

Exemple 3 : Et (&&) Opérateur

Nous pouvons spécifier l'opérateur 'et (&&)' pour spécifier plusieurs conditions à la fois. Si toutes les conditions sont vraies, les enregistrements qui satisfont à toutes les conditions sont renvoyés par la requête.

Dans cet exemple, nous sélectionnons les enregistrements si la quantité est supérieure à 20 et le coût est de 67,89.

La requête est ' à partir de i dans country_prices
où i.quantité < 20 && i.coût == 67,89
sélectionnez-moi »

était données = depuis je dans country_prices
je . quantité < vingt && je . coût == 67,89
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Il n'y a qu'un seul enregistrement avec une quantité inférieure à 20 et un coût de 67,89

Ligne # 21 – Ligne # 29 :

Exemple 4 : Ou (||) Opérateur

L'opérateur 'ou (||)' est également utilisé pour spécifier plusieurs conditions à la fois. Si au moins une condition est vraie, les enregistrements qui satisfont cette condition sont renvoyés.

Dans cet exemple, nous sélectionnons les enregistrements si la quantité est supérieure à 300 ou si l'emplacement est 'Tokyo'.

La requête est ' à partir de i dans country_prices
où i.quantité > 300 || i.location == 'Tokyo'
sélectionnez-moi »

était données = depuis je dans country_prices
je . quantité > 300 || je . emplacement == 'Tokyo'
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Il n'y a qu'un seul enregistrement avec une quantité supérieure à 300 (la première condition est satisfaite).

Ligne # 21 – Ligne # 29 :

3. Commander par

Si vous souhaitez organiser les enregistrements renvoyés par la requête LINQ dans l'ordre croissant ou décroissant en fonction des valeurs de l'un des attributs, vous pouvez utiliser l'opérateur « trier par » dans la requête. Vous devez spécifier cet opérateur avant l'opérateur 'select'.

Syntaxe:

Voyons comment utiliser l'opérateur 'order by' dans la requête LINQ.

Ordre croissant:

depuis itérateur dans La source de données
commande par itérateur . attribut Ascendant
sélectionner itérateur ;

Ordre décroissant:

depuis itérateur dans La source de données
commande par itérateur . attribut descendant
sélectionner itérateur ;

Exemple 1: Ordre croissant

Sélectionnez tous les attributs de la source de données (liste) et renvoyez-les dans l'ordre croissant en fonction des valeurs de l'attribut de quantité.

La requête est ' à partir de i dans country_prices
orderby i.quantity croissant
sélectionnez-moi »

était données = depuis je dans country_prices
commander par moi . quantité Ascendant
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Ligne # 21 – Ligne # 29 :

Exemple 2 : Ordre décroissant

Sélectionnez tous les attributs de la source de données (liste) et renvoyez-les dans l'ordre décroissant en fonction des valeurs de l'attribut de coût.

La requête est ' à partir de i dans country_prices
orderby i.cost décroissant
sélectionnez-moi »

était données = depuis je dans country_prices
commander par moi . coût descendant
sélectionner je ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

Sortir:

Ligne # 21 – Ligne # 29 :

4. Limite

La limite dans SQL limite les enregistrements renvoyés par la requête. Il renvoie les meilleurs enregistrements renvoyés par la requête. Dans LINQ, nous pouvons y parvenir en utilisant Skip() avec l'opérateur Take(). Take() obtient le nombre d'enregistrements spécifié. Skip() est utilisé pour spécifier le numéro d'enregistrement de départ. De cette façon, nous pouvons atteindre la fonctionnalité 'limite' dans LINQ.

Syntaxe:

( depuis itérateur dans La source de données
sélectionner itérateur ) . Sauter ( n ) . Prendre ( n ) ;
  1. Skip () est utilisé pour ignorer les enregistrements et renvoyer les enregistrements restants. Il prend un entier qui spécifie le nombre d'éléments à ignorer. Dans notre cas, c'est 0.
  2. Take() est utilisé pour prendre le nombre 'n' d'enregistrements à partir du premier enregistrement.

Exemple:

Sélectionnez les trois premiers enregistrements parmi les cinq qui sont renvoyés par la requête.

La requête est ' (à partir de i dans country_prices
sélectionnez i).Skip(0).Take(3) »

était données = ( depuis je dans country_prices
sélectionner je ) . Sauter ( 0 ) . Prendre ( 3 ) ;

pour chaque ( était je dans données )
{
Console . WriteLine ( je . article + ' ' + je . emplacement + ' ' + je . quantité + ' ' + je . coût ) ;

}

}

Sortir:

Ligne # 21 – Ligne # 28 :

Conclusion

Nous avons appris à écrire les requêtes en C# LINQ, qui est similaire à SQL. Dans le cadre de ce didacticiel, nous avons expliqué comment utiliser l'opérateur 'select' pour sélectionner les enregistrements de la source de données. Pour filtrer les enregistrements renvoyés par la requête, nous avons utilisé l'opérateur 'où' en précisant les conditions. Ensuite, nous avons appris à trier les enregistrements renvoyés par la requête avec l'opérateur 'trier par'. Enfin, pour limiter les enregistrements, nous avons utilisé les opérateurs Skip() et Take().