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évisionLes deux révisions suivantes
developpement:dotnet:linq:linq-to-sql:introduction [2022/02/02 00:42] – modification externe 127.0.0.1developpement:dotnet:linq:linq-to-sql:introduction [2022/03/15 14:49] 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>