Nous allons présenter une série de diverses opérations CRUD (Create Read Update Delete)
appliquées sur notre base de données ECOLE.
1. Opérations de lecture :
Dans cette partie, on répondra à chaque question de la manière suivante, dans l'ordre :
- Requête SQL
- "Expression query" de LINQ
- Opérateurs LINQ (méthodes d'extention) de la classe Queryable, et expressions lambda : "Lambda query"
Q1. Obtenir la liste des noms, prénoms et date de naissance de tous les élèves.
SELECT nom, prenom, date_naissance FROM ELEVES
var listEleves = from el in dc.ELEVEs
select new { el.NOM, el.PRENOM, el.DATE_NAISSANCE };
var listEleves = dc.ELEVEs.Select(el => new { el.NOM, el.PRENOM, el.DATE_NAISSANCE });
Q2. Obtenir tous les renseignements sur toutes les activités.
SELECT * FROM ACTIVITES
var listActivites = from a in dc.ACTIVITEs
select a;
var listActivites = dc.ACTIVITEs.Select(a => a);
Q3. Obtenir la liste des spécialités des professeurs.
SELECT DISTINCT specialite FROM PROFESSEURS WHERE specialite IS NOT NULL
var listSpec = from p in dc.PROFESSEURs
where p.SPECIALITE != null
select new { p.SPECIALITE };
var listSpec = dc.PROFESSEURs
.Where(p => p.SPECIALITE != null)
.Select(p => p.SPECIALITE)
.Distinct();
Q4. Obtenir le nom et le prénom des élèves pesant moins de 45 kilos et inscrits en 1ére année ou des élèves inscrits en 2ème année.
SELECT nom, prenom FROM ELEVES WHERE (poids < 45 AND annee =" 1) OR annee = 2
var listEleves = from el in dc.ELEVEs
where ((el.POIDS < 45 && el.ANNEE == 1) || el.ANNEE == 2)
select new { el.NOM, el.PRENOM };
var listEleves = dc.ELEVEs
.Where(el => ((el.POIDS < 45 && el.ANNEE == 1) || el.ANNEE == 2))
.Select(el => new { el.NOM, el.PRENOM } );
Q5. Obtenir le nom des professeurs dont la spécialité est 'poésie' ou 'sql'.
SELECT nom FROM PROFESSEURS WHERE specialite IN ('poésie', 'sql')
var listProfesseurs = from p in dc.PROFESSEURs
where (p.SPECIALITE.Equals("poésie") || p.SPECIALITE.Equals("sql"))
select p.NOM;
var listProfesseurs = dc.PROFESSEURs
.Where(p => (p.SPECIALITE.Equals("poésie")
|| p.SPECIALITE.Equals("sql")))
.Select(p => p.NOM);
Q6. Obtenir le nom des élèves dont le nom commence par 'L'.
SELECT nom FROM ELEVES WHERE nom LIKE'L%'
var listEleves = from el in dc.ELEVEs
where el.NOM.StartsWith("L")
select el.NOM;
var listEleves = dc.ELEVEs.Where(el => el.NOM.StartsWith("L")).Select(el => el.NOM);
Q7. Obtenir pour chaque professeur, son nom et sa spécialité.
SELECT nom, ISNULL(specialite, '****') AS specialite FROM professeurs
var listSpec = from p in dc.PROFESSEURs
select new { specialite = (p.SPECIALITE == null)?"****":p.SPECIALITE };
var listSpec = dc.PROFESSEURs.Select(p => (p.SPECIALITE == null)?"****":p.SPECIALITE);
Q8. Obtenir le nom et prenom d'eleves et leur résultats par cours.
SELECT nom, ISNULL(specialite, '****') AS specialite FROM professeurs
var listResults = from el in dc.ELEVEs
join r in dc.RESULTATs on el.NUM_ELEVE equals r.NUM_ELEVE
join c in dc.COURs on r.NUM_COURS equals c.NUM_COURS
select new { el.NOM, el.PRENOM, nomCour = c.NOM, r.POINTS };
var listResults = dc.ELEVEs.Join(dc.RESULTATs, el => el.NUM_ELEVE, r => r.NUM_ELEVE,
(el, r) => new { el.NOM, el.PRENOM, r.POINTS, r.NUM_COURS })
.Join(dc.COURs, tmpVar => tmpVar.NUM_COURS, c => c.NUM_COURS,
(tmpVar, c) => new { tmpVar.NOM, tmpVar.PRENOM, nom_cours = c.NOM, tmpVar.POINTS });
Q9. Obtenir le nombre de professeurs par specialité. Ordonnez par ordre alphabétique des spécialités.
SELECT specialite, nb_professeurs = count(*) FROM PROFESSEURS GROUP BY specialite
var listResult = from p in dc.PROFESSEURs
where p.SPECIALITE != null
group p by p.SPECIALITE into g
orderby g.Key ascending
select new { g.Key, nb_professeurs = g.Count() };
var listResult = dc.PROFESSEURs
.Where(p => p.SPECIALITE != null)
.GroupBy(p => p.SPECIALITE)
.OrderBy(g => g.Key)
.Select( g => new { g.Key, nb_professeurs = g.Count() });
2. Opérations de création, mise à jour et de suppression :
Q1. Créer et ajouter un nouveau professeur .NET nommé "Antonio", arrivé aujourd'hui. Son salaire de base et actuel sera de 2500000.
// création du nouveau professeur
PROFESSEUR newProf = new PROFESSEUR { NUM_PROF = 9,
NOM = "Antonio",
SPECIALITE = ".NET",
DATE_ENTREE = DateTime.Now,
SALAIRE_BASE = 2500000,
SALAIRE_ACTUEL = 2500000 };
dc.PROFESSEURs.InsertOnSubmit(newProf); // ajout et prise en compte dans le DataContext
dc.SubmitChanges(); // sauvegarde effective en base de donnée
Q2. Depuis son arrivée, Antonio a eu une augmentation de 10% par rapport à son salaire actuel. Mettre à jour ces informations.
try
{
var prof = dc.PROFESSEURs.Single(p => p.NOM == "Antonio" && p.SPECIALITE == ".NET");
prof.SALAIRE_ACTUEL += prof.SALAIRE_ACTUEL * 0.1;
dc.SubmitChanges();
}
catch(Exception ex){
// Exception : Pas de professeurs .NET appelé Antonio !
}
Q3. Antonio enseigne la programmation. Ajoutez cette information dans la table CHARGE.
// récupère le professeur Antonio
var leProf = dc.PROFESSEURs.Single(p => p.NOM == "Antonio");
// récupère le cours de programmation
var leCours = dc.COURs.Single(c => c.NOM == "Programmation");
// crée une nouvealle charge
CHARGE uneCharge = new CHARGE { PROFESSEUR = leProf, COUR = leCours };
// Ajoute et sauvegarde en base la nouvelle charge
dc.CHARGEs.InsertOnSubmit(uneCharge);
dc.SubmitChanges();
Q4. Notre bon vieil ami Antonio n'enseigne plus et part finir ses jours à la retraite au soleil... Supprimer toutes les informations existantes sur Antonio.
/* Suppression des informations d'Antonio */
// récupère le professeur Antonio
var prof = dc.PROFESSEURs.Single(p => p.NOM.Equals("Antonio"));
// Prise en compte de la suppression dans le DataContext
dc.PROFESSEURs.DeleteOnSubmit(prof);
// Récupère la liste des charges d'Antonio
var listeCharges = dc.CHARGEs
.Where(c => c.PROFESSEUR.Equals(prof))
.Select(c => c);
// Prise en compte de la suppression des charges dans le DataContext
dc.CHARGEs.DeleteAllOnSubmit(listeCharges);
// Validation et Suppression effective en base de donnée :
dc.SubmitChanges();
0 commentaires:
Enregistrer un commentaire