Utilisation simple de LINQ avec C#

Introduit dans le Framework .NET 3.0, LINQ (Language Integrated Query) est utilisé pour récupérer ou modifier des données. LINQ introduit des modèles pour interroger un objet, une base de données, un fichier XML et les données ADO.NET. Ainsi, vous pouvez écrire des requêtes puissantes directement à partir du langage C#. Vous pouvez créer des requêtes de filtrage, de classement ou de regrouppement de données.

Exemple 1

L'exemple suivant permet de récupérer les données dans un Array de string.

string[] strMake = { "Acura", "Chevrolet", "Mazda", "Toyota", "Nissan", "Honda" };

var make = from x in strMake
           where x.Length > 5
           orderby x
           select x;

foreach (string s in make)
    Response.Write(s);

Le résultatest : ChevroletNissanToyota

Une requête LINQ retourne un résultat de type IEnumerabe. La valeur "T" équivaut au type de l'objet utilisé dans la requête. L'exemple ci-haut retourne un objet de type "string".

Exemple 2

LINQ propose une interface pour pouvoir faire des requêtes à partir d'un objet. Voici un exemple simple de son utilisation :

public class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}

IList lstCar = new List
                        {
                            new Car {Make = "Honda", Model = "Accord", Year = 2011},
                            new Car {Make = "Acura", Model = "TSX", Year = 2010},
                            new Car {Make = "Toyota", Model = "Camry", Year = 2009},
                            new Car {Make = "Honda", Model = "Civic", Year = 2007},
                            new Car {Make = "Mazda", Model = "6", Year = 2008},
                            new Car {Make = "Nissan", Model = "Sentra", Year = 2002}
                        };
var cars = from x in lstCar
            where x.Year >= 2008
            orderby x.Make, x.Model
            select x;

foreach (Car c in cars)
    Response.Write(c.Make + " " + c.Model + " " + c.Year.ToString() + "
");

Résultat :
Acura TSX 2010
Honda Accord 2011
Mazda 6 2008
Toyota Camry 2009

Plus d'exemples seront disponibles plus tard...

Librairie pour analyser le code HTML

L'analyse d'un document XML est supporté par les objets XMLDocument et XPathDocument dans le Framework .NET. Si vous avez déjà analisé un document HTML, vous avez sans doute remarqué quelques similutides avec un document XML. Par contre, il n'existe aucun objet pour permettre de parser du code HTML. Vous pouvez analysé du HTML à l'aide de manipulation de string et/ou des expressions régulières. Cependant, il est très difficile d'obtenir de bons résultats avec ces méthodes.

Heureusement, il existe une librairie .NET (HTML Agility Pack) pour faire des manipulations HTML. Cette librairie permet de parser du code HTML et le structuré de façon à obtenir des objets similaires au langage XML.

Voici quelques exemples de l'utilisation de cette librairie.

Obtenir tous les liens d'une page WEB

HtmlWeb hw = new HtmlWeb();
HtmlDocument hd = hw.Load("http://www.billypepin.com");
HtmlNodeCollection hnc = hd.DocumentNode.SelectNodes("//a[@href]");

foreach (HtmlNode hn in hnc)
    Response.Write(hn.Attributes["href"].Value + "
");

Extraire les valeurs des tableaux d'une page WEB

L'exemple ci-dessous démontre l'utilisation de Linq to Objects.

HtmlWeb hw = new HtmlWeb();
HtmlDocument hd = hw.Load("http://www.billypepin.com");

var query = from table in hd.DocumentNode.SelectNodes("//table").Cast()
            from row in table.SelectNodes("tr").Cast()
            from cell in row.SelectNodes("th|td").Cast()
            select new {Table = table.Id, Value = cell.InnerText};

foreach(var c in query)
    Response.Write(String.Format("{0}: {1}", c.Table, c.Value));

En résumé, cette librairie permet de simplifier l'analyse du code HTML. De plus, vous pouvez créer des routines pour : modifier ou corriger le rendu HTML, extraire les liens ou images et extraire du contenu d'une page web.

Utilisation de jQuery pour consommer un Webservice ASP.NET JSON

Qu'est ce que JSON ?

JSON (Javascript Object Notation) est un format d'échange de données simple, rapide, facile à lire et à écrire pour l'humain ou la machine. L'utilisation d'un fichier JSON sert principalement à échanger des valeurs avec le serveur. Ainsi, le format d'échange de données JSON vous offre une alternative simple, rapide et efficace.

JSON est construit en deux structures :

  • Collection de nom / pair de valeur (enregistrement, objet, dictionnaire, ..)
  • Liste de valeurs (Liste, vecteur une séquence de valeur)
  • Exemple JSON:

    var jsonPersonne = { Personne: { Nom: "Billy Pépin", Genre: "Masculin", Age: 29 } };
    

    Personne : Objet avec propriété Nom, Genre et Age. jsonPersonne = Objet JSON

    Exemple Array (séquence):

    var jsonCouleur = ["Rouge", "Bleu", "Jaune", "Noir"];
    

    Exemple simple ASP.NET - JQuery

    Dans l'exemple suivant, nous allons voir comment il est simple de consommer un web service JSON à l'aide de ASP.NET.

    Premièrement, créer une nouvelle application ASP.NET 4.0 à l'aide de Visual Studio 2010 (Ou version antérieure).

    Création d'une classe simple

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace ASP.NET4_JSON
    {
        public class Employe
        {
            public string Prenom;
            public string Nom;
            public int Age;
            public string Genre;
            public string Pays;
        }
    }
    

    Dans cet exemple, j'utilise une classe "Employe". La classe permet d'afficher une liste de personne à l'aide d'un Web Service JSON.

    Création du Web Service JSON

    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Web.Script.Services;
    using System.Collections.Generic;
    using System.Linq;
    using ASP.NET4_JSON;
    
    /// 
    /// Summary description for CarService
    /// 
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class EmployeService : WebService
    {
        List Employes = new List
        {
            new Employe{ Prenom = "Prénom 1", Nom = "Nom 1", Age = 20, Genre = "Masculin", Pays = "Canada" },
            new Employe{ Prenom = "Prénom 2", Nom = "Nom 2", Age = 22, Genre = "Féminin", Pays = "USA" },
            new Employe{ Prenom = "Prénom 3", Nom = "Nom 3", Age = 21, Genre = "Masculin", Pays = "Canada" },
            new Employe{ Prenom = "Prénom 4", Nom = "Nom 4", Age = 30, Genre = "Féminin", Pays = "USA" },
            new Employe{ Prenom = "Prénom 5", Nom = "Nom 5", Age = 24, Genre = "Masculin", Pays = "Canada" },
            new Employe{ Prenom = "Prénom 6", Nom = "Nom 6", Age = 22, Genre = "Masculin", Pays = "France" },
            new Employe{ Prenom = "Prénom 7", Nom = "Nom 7", Age = 50, Genre = "Féminin", Pays = "Mexique" },
            new Employe{ Prenom = "Prénom 8", Nom = "Nom 8", Age = 28, Genre = "Masculin", Pays = "France" },
            new Employe{ Prenom = "Prénom 9", Nom = "Nom 9", Age = 31, Genre = "Masculin", Pays = "Chine" },
            new Employe{ Prenom = "Prénom 10", Nom = "Nom 10", Age = 39, Genre = "Féminin", Pays = "France" },
            new Employe{ Prenom = "Prénom 11", Nom = "Nom 11", Age = 35, Genre = "Masculin", Pays = "Canada" }
        };
    
        [WebMethod]
        public List ListerTous()
        {
            return Employes;
        }
    
        [WebMethod]
        public List ListerParPays(string pays)
        {
            var employes = from e in Employes
                        where e.Pays.ToLower() == pays.ToLower()
                        select e;
    
            return employes.ToList();
        }
    }
    

    Il sera possible de questonner le Web Service selon 2 méthodes.

    • Liste de tous les employés
    • Liste des employés par pays

    Code Javascript

        <script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"></script>
    
        <script type="text/javascript">
            $(function () 
            {
                $('#Button1').click(AfficherEmployes);
            });
    
            $(function () {
                $('#Button2').click(AfficherEmployesParPays);
            });
    
            function AfficherEmployes() {
                $.ajax({
                    type: "POST",
                    url: "WebService1.asmx/ListerTous",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        var employes = response.d;
                        $('#contenu1').empty();
                        $.each(employes, function (index, employe) {
                            $('#contenu1').append('<p><strong>' + employe.Prenom + ' ' +
                                        employe.Nom + '</strong><br /> Age: ' +
                                        employe.Age + '<br />Genre: ' +
                                        employe.Genre + '<br />Pays: ' +
                                        employe.Pays + '</p>');
                        });
                    },
                    failure: function (msg) {
                        $('#contenu1').text(msg);
                    }
                });
            }
    
            function AfficherEmployesParPays() {
                $.ajax({
                    type: "POST",
                    url: "WebService1.asmx/ListerParPays",
                    data: "{pays: '" + $('#<%= tbPays.ClientID %>').val() + "' }",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        var employes = response.d;
                        $('#contenu2').empty();
                        $.each(employes, function (index, employe) {
                            $('#contenu2').append('<p><strong>' + employe.Prenom + ' ' +
                                        employe.Nom + '</strong><br /> Age: ' +
                                        employe.Age + '<br />Genre: ' +
                                        employe.Genre + '<br />Pays: ' +
                                        employe.Pays + '</p>');
                        });
                    },
                    failure: function (msg) {
                        $('#contenu2').text(msg);
                    }
                });
            }
        </script>
    

    Code HTML

        <h2>Utilisation JQuery et JSON</h2>
    
        <div style="float:left; width:300px;">
            <h2>Afficher les employés</h2>
            <input type="button" id="Button1" value="Afficher" />
            <div id="contenu1"></div>
        </div>
    
        <div style="float:left; width:300px;">
            <h2>Afficher les employés par pays</h2>
            <asp:TextBox runat="server" ID="tbPays"></asp:TextBox>
            <input type="button" id="Button2" value="Afficher" />
            <div id="contenu2"></div>
        </div>
    


    Télécharger l'exemple ci-haut (Visual Studio 2010 - ASP.NET 4.0).

    ASP.NET4-JSON.zip (76,51 kb)

     

    À propos

    Je suis un développeur web. Je m'intéresse également à l'optimisation de site pour les moteurs de recherche (SEO). Sur ce site, vous trouverez des trucs, conseils, tutoriels pour vous aider à développer  des applications web à l'aide de : ASP.NET, ASP.NET MVC, jQuery, Javascript et plus. De plus, je vous tiendrai au courant des nouveautés sur le web.

    Pages