developpement:dotnet:linq:linq-to-sql:introduction
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
developpement:dotnet:linq:linq-to-sql:introduction [2014/11/07 19:39] – [MetaModel] sgariepy | developpement:dotnet:linq:linq-to-sql:introduction [2022/03/15 14:50] – sgariepy | ||
---|---|---|---|
Ligne 211: | Ligne 211: | ||
Note : Il est préférable de mettre '' | Note : Il est préférable de mettre '' | ||
+ | |||
+ | === Jointure avec méthode chainée === | ||
+ | |||
+ | <code csharp> | ||
+ | var query = db.Companies.Where(c => c.CompanyName == companyName) | ||
+ | .Join(db.Persons, | ||
+ | .Select(p => new | ||
+ | { | ||
+ | Id = p.PersonId, | ||
+ | Name = string.Format(" | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
=== Jointure avec clé composite === | === Jointure avec clé composite === | ||
Ligne 245: | Ligne 260: | ||
* [[http:// | * [[http:// | ||
- | |||
==== Groupement ==== | ==== Groupement ==== | ||
Ligne 645: | Ligne 659: | ||
SubmitChanges(); | SubmitChanges(); | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Exemples ====== | ||
+ | |||
+ | ===== Exemple 1 ===== | ||
+ | |||
+ | <code csharp> | ||
+ | domInt[0] = 76; | ||
+ | domInt[1] = 70; | ||
+ | domInt[2] = 72; | ||
+ | |||
+ | var result= (from a in Employee | ||
+ | select new | ||
+ | { | ||
+ | a.IdEmployeeDetails, | ||
+ | DF = String.Join(" | ||
+ | where domInt.Contains(d.IdAddress) | ||
+ | select new {AddressName=d.AddressName}.ToString()).ToArray() ), | ||
+ | a.IdDepartment, | ||
+ | a.Status | ||
+ | }).ToList(); | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Obtenir des Id inutilisés ===== | ||
+ | |||
+ | <code csharp> | ||
+ | int[] strs = (from c in EMPLOYEs | ||
+ | select c.EMPLOYE_PK).ToArray(); | ||
+ | |||
+ | var missing = from i in Enumerable.Range(strs.Min(), | ||
+ | where !strs.Contains(i) | ||
+ | select i; | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Exemple 2 ===== | ||
+ | |||
+ | <code csharp> | ||
+ | /// < | ||
+ | /// Donne un bloc d'Ids qui sont disponibles dans la table us_Acces | ||
+ | /// et qui pourront être utilisés. | ||
+ | /// </ | ||
+ | /// < | ||
+ | /// Recueille les trous, c' | ||
+ | /// avant et après ceux-ci. | ||
+ | /// | ||
+ | /// retournera le 3,7,8,... | ||
+ | /// S'il n'y en a pas assez d'Id récupérés, | ||
+ | /// et on incrémente les Ids à partir de celui-ci. | ||
+ | /// </ | ||
+ | /// <param name=" | ||
+ | /// < | ||
+ | private int[] GetNextAvailableIdBlock(int blockLentgth) | ||
+ | { | ||
+ | using (AccesBDDataContext db = new AccesBDDataContext()) | ||
+ | { | ||
+ | int[] IdBlock = new int[blockLentgth]; | ||
+ | |||
+ | // On recherche les trous, c' | ||
+ | int[] t1 = (from a in db.us_Acces | ||
+ | where !(from a1 in db.us_Acces | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | if (t1.Length < blockLentgth) | ||
+ | { | ||
+ | // On récupère le dernier Id disponible + 1 et on incrémentera à partir de cet Id | ||
+ | int lastAvailableId = (from i in db.us_Acces select i.IdAcces).Max() + 1; | ||
+ | for (int i = 0; i < IdBlock.Length; | ||
+ | { | ||
+ | IdBlock[i] = lastAvailableId++; | ||
+ | } | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | // On prend les premiers disponibles (au nombre de " | ||
+ | IdBlock = t1.Take(blockLentgth).ToArray(); | ||
+ | } | ||
+ | return IdBlock; | ||
+ | } | ||
+ | } | ||
</ | </ | ||
Ligne 658: | Ligne 756: | ||
- [[http:// | - [[http:// | ||
- [[http:// | - [[http:// | ||
+ | - [[https:// | ||
===== Code generation ===== | ===== Code generation ===== | ||
Ligne 672: | Ligne 771: | ||
- [[http:// | - [[http:// | ||
- [[http:// | - [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== LINQ-to-Objects ====== | ||
+ | |||
+ | |||
+ | ===== Where ===== | ||
+ | |||
+ | Exemple de '' | ||
+ | |||
+ | <code csharp> | ||
+ | List< | ||
+ | Etudiant etudiant = etudiants.Where(e => e.Id == 2).First(); | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Ressources ===== | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== LINQ-to-XML ====== | ||
+ | |||
+ | ===== Charger et sauvegarder un fichier XML ===== | ||
+ | |||
+ | Il y a plusieurs façons de charger un fichier XML: | ||
+ | * Un document XML complet | ||
+ | * Un élément XML contenant des enfants ou non. | ||
+ | |||
+ | Pour charger un document complet on peut utiliser '' | ||
+ | |||
+ | <code csharp> | ||
+ | XDocument doc = XDocument.Load(@" | ||
+ | </ | ||
+ | |||
+ | Ou un fichier contenant un élément particulier //root// avec '' | ||
+ | |||
+ | <code csharp> | ||
+ | XElement doc = XElement.Load(@" | ||
+ | </ | ||
+ | |||
+ | Pour sauvegarder un fichier XML c'est avec '' | ||
+ | |||
+ | <code csharp> | ||
+ | doc = XDocument.Save(@" | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Charger un XML d'une chaîne ===== | ||
+ | |||
+ | Utiliser '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Opérations sur les éléments ===== | ||
+ | |||
+ | ==== Suppression ==== | ||
+ | |||
+ | |||
+ | <code csharp> | ||
+ | XDocument doc = XDocument.Load(@" | ||
+ | var elements = from i in doc.Descendants(" | ||
+ | | ||
+ | elements.Remove(); | ||
+ | doc.Save(@" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Créer un document XML ===== | ||
+ | |||
+ | |||
+ | <code csharp> | ||
+ | XElement weekToArchive = new XElement(" | ||
+ | foreach (var comment in commentsToArchive) { | ||
+ | weekToArchive.Add( | ||
+ | new XElement(" | ||
+ | new XAttribute(" | ||
+ | new XAttribute(" | ||
+ | new XAttribute(" | ||
+ | ) | ||
+ | ); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |