Outils pour utilisateurs

Outils du site


developpement:dotnet:linq:linq-to-sql:introduction

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
developpement:dotnet:linq:linq-to-sql:introduction [2015/05/28 19:39] – [Concaténation et jointure] sgariepydeveloppement:dotnet:linq:linq-to-sql:introduction [2022/03/15 14:50] sgariepy
Ligne 659: Ligne 659:
  
 SubmitChanges(); SubmitChanges();
 +</code>
 +
 +
 +====== 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("|", (from d in Addresses
 +                where domInt.Contains(d.IdAddress)
 +                select new  {AddressName=d.AddressName}.ToString()).ToArray() ),
 +                a.IdDepartment,
 +                a.Status
 +    }).ToList();
 +</code>
 +
 +
 +===== 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(),strs.Max()-strs.Min())
 +                where !strs.Contains(i)
 +                select i;
 +</code>
 +
 +
 +===== Exemple 2 =====
 +
 +<code csharp>
 +/// <summary>
 +/// Donne un bloc d'Ids qui sont disponibles dans la table us_Acces
 +/// et qui pourront être utilisés.
 +/// </summary>
 +/// <remarks>
 +/// Recueille les trous, c'est-à-dire les Id disponibles ayant des Ids
 +/// avant et après ceux-ci.  Par exemple, dans la liste :
 +///   [1,2,4,5,6,9,10,11,...]
 +/// retournera le 3,7,8,...
 +/// S'il n'y en a pas assez d'Id récupérés, on retrouve le dernier Id utilisé
 +/// et on incrémente les Ids à partir de celui-ci.
 +/// </remarks>
 +/// <param name="blockLentgth">Nombre de Id demandés.</param>
 +/// <returns>Bloc d'Ids disponibles qui pourront être utilisés.</returns>
 +private int[] GetNextAvailableIdBlock(int blockLentgth)
 +{
 +    using (AccesBDDataContext db = new AccesBDDataContext())
 +    {
 +        int[] IdBlock = new int[blockLentgth];
 +
 +        // On recherche les trous, c'est-à-dire les IdAcces qui ne sont pas utilisés
 +        int[] t1 = (from a in db.us_Acces
 +                 where !(from a1 in db.us_Acces
 +                         select a1.IdAcces)
 +                         .Contains(a.IdAcces - 1)
 +                 select a.IdAcces - 1).ToArray();
 +
 +        if (t1.Length < blockLentgth)  // il y a moins de "trous" dans les Id que de Id demandés
 +        {
 +            // 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; i++)
 +            {
 +                IdBlock[i] = lastAvailableId++;
 +            }
 +        }
 +        else
 +        {
 +            // On prend les premiers disponibles (au nombre de "blockLength") dans la liste.
 +            IdBlock = t1.Take(blockLentgth).ToArray();
 +        }
 +        return IdBlock;
 +    }
 +}
 </code> </code>
  
Ligne 672: Ligne 756:
   - [[http://www.devart.com/linqconnect/|LinqConnect]]   - [[http://www.devart.com/linqconnect/|LinqConnect]]
   - [[http://www.codeproject.com/KB/linq/linqtutorial.aspx|A LINQ Tutorial: Mapping Tables to Objects]] (avec WCF)   - [[http://www.codeproject.com/KB/linq/linqtutorial.aspx|A LINQ Tutorial: Mapping Tables to Objects]] (avec WCF)
 +  - [[https://github.com/SanderSade/common-linq-mistakes/blob/master/README.md|Common LINQ mistakes]]
 ===== Code generation ===== ===== Code generation =====
    
Ligne 686: Ligne 771:
   - [[http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx|LINQ to SQL - 5 Minute Overview]]   - [[http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx|LINQ to SQL - 5 Minute Overview]]
   - [[http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx|101 LINQ Samples]]   - [[http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx|101 LINQ Samples]]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +====== LINQ-to-Objects ======
 +
 +
 +===== Where =====
 +
 +Exemple de ''Where(predicate)'' avec une liste d'étudiants :
 +
 +<code csharp>
 +List<Etudiant> etudiants = Etudiant.GetAll();
 +Etudiant etudiant = etudiants.Where(e => e.Id == 2).First();
 +</code>
 +
 +
 +===== Ressources =====
 +  * [[http://msdn.microsoft.com/en-us/library/bb397919.aspx|LINQ to Objects]]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +====== 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 ''XDocument.Load(string filename)'' Le fichier XML doit être un fichier XML complet valide.
 +
 +<code csharp>
 +XDocument doc = XDocument.Load(@"C:\\Current.xml");
 +</code>
 +
 +Ou un fichier contenant un élément particulier //root// avec ''XElement.Load(string filename)''.
 +
 +<code csharp>
 +XElement doc = XElement.Load(@"C:\\Current.xml");
 +</code>
 +
 +Pour sauvegarder un fichier XML c'est avec ''XDocument.Save(string filename)''.
 +
 +<code csharp>
 +doc = XDocument.Save(@"C:\\Current_saved.xml");
 +</code>
 +
 +
 +
 +
 +===== Charger un XML d'une chaîne =====
 +
 +Utiliser ''XDocument.Parse(string text)''.
 +
 +
 +
 +
 +
 +
 +===== Opérations sur les éléments =====
 +
 +==== Suppression ====
 +
 +
 +<code csharp>
 +XDocument doc = XDocument.Load(@"C:\\Current.xml");
 +var elements = from i in doc.Descendants("Revision")
 +               select i;
 +elements.Remove();
 +doc.Save(@"C:\\Current.xml");
 +</code>
 +
 +
 +===== Créer un document XML =====
 +
 +
 +<code csharp>
 +  XElement weekToArchive = new XElement("week", new XAttribute("value", Week.GetCurrentWeekStr()));
 +    foreach (var comment in commentsToArchive) {
 +      weekToArchive.Add(
 +        new XElement("comment",
 +          new XAttribute("datetime", DateTime.Now.ToString()),
 +          new XAttribute("keyid", comment.Attribute("ID").Value),
 +          new XAttribute("text", comment.Attribute("Comment").Value)
 +        )
 +    );
 +}
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +