221 Exemples Utilisation de Linq

EXERCICE LINQ UTILISATION D'UNE WINFORM. BASE DE DONNÉES UTILISÉ
E ... Créer un projet WINFORM sous Visual Studio C# 2010. Ajouter un nouvel ...

Part of the document


EXERCICE LINQ UTILISATION D'UNE WINFORM



BASE DE DONNÉES UTILISÉE : Base Cave

[pic]

Partie 1 : Mise en ?uvre

. Créer la base CAVE dans SQLSERVER.

. Créer les tables pour cette base avec les contraintes.

. Remplir ces tables avec des valeurs.

. Créer un projet WINFORM sous Visual Studio C# 2010.

. Ajouter un nouvel élément au projet : CLASS LINQ TO SQL.

. Créer dans l'explorateur de données une nouvelle connexion à la base.

. Choisir Microsoft SQLSERVER choisir le Serveur correspondant à votre
STATION, la base CAVE et ouvrir les tables.

. Les faire glisser dans l'interface, on obtient un modèle objet.

Le projet WINFORM : Etape 1 :

. Un bouton de commande

. Une listBox

. Le code dans le bouton de Commande.

. On utilise le modèle Objet pour la Base Cave.


Partie 1 : La programmation : nous allons utiliser les OBJETS du modèle:
. Créer un objet de la classe du MODELE DE LA BASE et l'initialiser.
DataClasses1DataContext cv;
cv = new DataClasses1DataContext();

. On dispose de l'ensemble de la base sous forme d'objets, nous allons
pouvoir à l'aide de LINQ construire des requêtes.
EXERCICE 1 : afficher à partir d'un bouton la liste des désignation des
vins de la table VIN dans une LISTBOX.
. La requête :
// Construire la requête, rechercher tous le
désignations de VINS.
var liste_vins = // La Variable Querable ou Enumerable
from v in cv.vin // La Source
select v; // La Condition
Afficher la liste des vins.
Le IQueryable
Fournit les fonctionnalités permettant d'évaluer les requêtes appliquées à
une source de données spécifique dont le type de données est connu.
foreach (var x in liste_vins)
{
listBox1.Items.Add(x.DesignationVin.ToString());
}

Exercice 2 :Saisir une lettre et afficher la liste des vins commençant par
cette lettre dans la listBox :
Le projet WINFORM : Etape 2:
. Un bouton de commande
. Une listBox
. Une textBox pour saisir la Lettre.
. Le code dans le bouton de Commande.
. On utilise le modèle Objet pour la Base Cave.

public partial class Form1 : Form
{
DataClasses1DataContext cv;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cv = new DataClasses1DataContext();
}
private void button1_Click(object sender, EventArgs e)
{
// Construire la requête, rechercher tous le désignations de
VINS.
// Le résultat est une collection IQuerable
string lettre = textBox1.Text;
var liste_vins = from v in cv.vin
where v.DesignationVin.StartsWith(lettre)
select v;
foreach (var x in liste_vins)
{
listBox1.Items.Add(x.DesignationVin.ToString());
}
}






Partie 3 JOINTURES : Création de jointure entre tables ;
Exercice 3 :Saisir une lettre et afficher la liste des vins commençant
par cette lettre dans la listBox : puis choisir une désignation et afficher
le nom des CEPAGES Correspondant à ce VIN :
Le projet WINFORM : Etape 3:
. Un bouton de commande
. Une listBox pour lister les Vins
. Une Listbox pour lister les cépages.
. Une textBox pour saisir la Lettre.
. Le code dans le bouton de Commande.
. On utilise le modèle Objet pour la Base Cave.
Table Des Vins
|VIN|DESIGNATION|MILLESI|
| | |ME |
|1 |vins blancs|2001 |
| |d'or | |
|2 |Les Ducs du|2003 |
| |Marais | |
|3 |Daf Daf Daf|2002 |
|4 |Les Vins de|2001 |
| |Provence | |
|5 |Les Vins de|1998 |
| |Bourgogne | |
|NUL|NULL |NULL |
|L | | |


Table Composer
|VIN|CEPA|POURCENTA|Commentai|
| |GE |GE |re |
|1 |1 |25,0000 |Un peu |
| | | |Jeune |
|1 |2 |55,0000 |Donne du |
| | | |tonus |
|1 |3 |20,0000 |Donne du |
| | | |piquant |
|2 |2 |65,0000 |Un peu |
| | | |corsé |
|2 |3 |35,0000 |Donne du |
| | | |tonus |
|3 |1 |25,0000 |Un peu |
| | | |Jeune |
|3 |3 |75,0000 |Donne du |
| | | |tonus |
|4 |4 |25,0000 |Un peu |
| | | |Jeune |
|4 |5 |75,0000 |Donne du |
| | | |tonus |
|NUL|NULL|NULL |NULL |
|L | | | |


Table Des Cépages
|CEPAG|DESIGNAT|
|E |ION |
|1 |Merlot |
|2 |Sauvigno|
| |n |
|3 |Sylvaner|
|4 |Grenache|
|5 |Riesling|
|NULL |NULL |


LE CODE AVEC LES JOINTURES ENTRE TABLES AVEC DES OPERATEURS PARTICULIERS
AUX LINQ :
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string designation = listBox1.SelectedItem.ToString();
//Requête Linq
var liste_cepage = from lcs in cv.cepage
join cpvc in cv.composer
on lcs.codeCepage equals cpvc.codeCepage
join vs in cv.vin
on cpvc.codeVin equals vs.codeVin
where vs.DesignationVin == designation
select lcs;
listBox2.Items.Clear();
foreach (var x in liste_cepage)
{
listBox2.Items.Add(x.LibelleCepage.ToString());
}
}

Partie 4 : Utilisation de LIKE avec LINQ ;
Exercice 4 : Saisir une chaine de caractères et afficher la liste des
vins contenant cette chaine dans la listBox : puis choisir une désignation
et afficher le nom des CEPAGES Correspondant à ce VIN :
Le projet WINFORM : On va introduire des Boutons Radios pour distinguer
différents cas :
. Aucune lettre.
. Commençant par une chaine.
. Contenant une chaine.

[pic]

La Solution utilise le FRAMEWORK 4 :
Le Code du bouton :
// Construire la requête, rechercher tous le désignations de VINS.
// Le résultat est une collection IQuerable
string lettre = textBox1.Text;
if (textBox1.Text == string.Empty)
{
var liste_vins = from v in cv.vin
select v;
listBox1.Items.Clear();
foreach (var x in liste_vins)
{
listBox1.Items.Add(x.DesignationVin.ToString());
}
}
else
{
if (radioCp.Checked == true)
{
var liste_vins = from v in cv.vin
where
v.DesignationVin.StartsWith(lettre)
select v;
listBox1.Items.Clear();
foreach (var x in liste_vins)
{
listBox1.Items.Add(x.DesignationVin.ToString());
}
}
else
{
string myPattern = "%" + textBox1.Text + "%";
// Utilisation de FRAMEWORK 4 pour sqlMethods
//Utilisation de using System.Data.Linq.SqlClient;
var liste_vins = from v in cv.vin
where SqlMethods.Like(v.DesignationVin, myPattern)
select v;
lis tBox1.Items.Clear();
foreach (var x in liste_vins)
{
listBox1.Items.Add(x.DesignationVin.ToString());
}
}

}



Partie 5 : Communication entre tables ;
Exercice 5 :
. On peut à partir d'une table communiquer avec d'autre table pour avoir
des valeurs.
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string designation = listBox1.SelectedItem.ToString();
//Requête Linq
var liste_cepage = from lcs in cv.cepage
join cpvc in cv.composer
on lcs.codeCepage equals cpvc.codeCepage
join vs in cv.vin
on cpvc.codeVin equals vs.codeVin
where vs.DesignationVin == designation
select lcs;
// RECHERCHE DU STOCK
var liste_stock = from bt in cv.bouteille
join embt in cv.embouteiller
on bt.typeBouteille equals
embt.typeBouteille
join vs in cv.vin
on embt.codeVin equals vs.codeVin
where vs.DesignationVin == designation
select embt;
listBox2.Items.Clear();
foreach (var x in liste_cepage)
{
listBox2.Items.Add(x.LibelleCepage.ToString());
}
listBox3.Items.Clear();
foreach (var x in liste_stock)
{
listBox3.Items.Add(x.QteStock.ToString() + " Bouteilles de
Contenance "+ x.bouteille.contenance.ToString() + " Cl"+ "Au Prix de
"+x.PrixBase.ToString());
}
}