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.

ASP.NET MVC - Qu'est ce que c'est ?

En résumé, MVC est un modèle de conception utilisant le modèles Model-View-Controller (MVC). Cette architecture n'est pas nouvelle et elle est utilisée depuis plusieurs années maintenant.

Qu'est ce que MVC ?

L'architecture Model-View-Controller utilise 3 couches :

  • Model : Représente les classes d'objets qui décrivent les données.
  • View : Représente les fichiers ASPX contenant le code HTML.
  • Controller : Il intéragit avec le Model et la View pour controller l'exécution de l'application

Présentement, plusieurs développeurs débattent sur l'utilisation de ASP.NET Webform et ASP.NET MVC. Il y a plusieurs raisons de choisir ASP.NET MVC pour le nouveau développement :

  1. La simplicité
  2. Facilite la façon de développer une application web
  3. Facilite la maintenance
  4. Facilite l'implémentation de tests unitaires
  5. S'adapte bien au pratique de développement Agile

Si vous développez à l'aide de ASP.NET Webform, il n'est pas nécessaire de se tourner immédiatement vers ASP.NET MVC.

L'utilisation du Framework MVC est conseillé si votre application répond au critères suivants :

  • L'application est complexe et interactive
  • L'application doit évolué dans le temps
  • L'application doit être Web 2.0

Dernièrement, j'ai fait quelques lectures à propos de l'utilisation de ASP.NET MVC et l'application de différentes solutions simples. Je dois admettre que je suis enthousiasme face aux possibilités qu'offre ce design pattern.

Le Url Routing avec ASP.NET WebForm

Le routing en .NET a débuté avec la sortie de ASP.NET MVC (Model View Controller). L'utilisation de l'engin de routing en ASP.NET requiert Microsoft Framework .NET 3.5 SP1.

Qu'est ce que le Url Routing ?

Le perfectionnement des moteurs de recherche comme Google, Yahoo ou Bing fait en sorte qu'il est important d'utiliser les dernières techniques pour s'assurer d'un bon positionnement. L'engin Url Routing d'ASP.NET vous permet de créer des liens plus attrayants. Vous pouvez ainsi inclure des mots clés ou termes spécifique directement dans vos liens.

Exemple

Imaginon que vous avec un formulaire ASP.NET standard : produit.aspx dans votre application. L'approche classique pour visionner cette page est de pointer une adresse directement sur l'emplacement physique de la page sur le serveur. Comme par exemple : http://www.monsite.com/produit.aspx?c=10&i=5, ou la valeur 10 représente la catégorie et la valeur 5 représente la clé primaire de l'item dans la base de données des produits.

Le Routing permet de décomposer l'adresse en plusieurs points. Le résultat final ne représente plus un fichier physique sur le disque, mais plutôt un chemin virtuel. Pour reprendre l'exemple ci-haut, le résultat sera : http://www.monsite.com/hockey/patins-reebok.

Le résultat que nous obtenons avec cette méthode n'est pas seulement plus propre, mais il permet d'inclure des mots clés important comme le nom de la catégorie en cours et le nom de l'item.

Utilisation

Ajoutez une référence : System.Web.Routing à votre projet.

Pour l'utilisation avec IIS 6, vous devez ajouté une instruction httpModules dans le fichier Web.Config

<httpModules>     
    <add name="RoutingModule"
    type="System.Web.Routing.UrlRoutingModule,
    System.Web.Routing,
    Version=3.5.0.0, Culture=neutral,
    PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

Pour l'utilisation avec IIS 7, vous devez ajouté 2 entrées dans le fichier Web.Config

   
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">

      <add name="UrlRoutingModule"
             type="System.Web.Routing.UrlRoutingModule, 
                   System.Web.Routing, Version=3.5.0.0, 
                   Culture=neutral, 
                   PublicKeyToken=31BF3856AD364E35" />
    </modules>
    <handlers>

      <add name="UrlRoutingHandler"
            preCondition="integratedMode"
            verb="*" path="UrlRouting.axd"
            type="System.Web.HttpForbiddenHandler, 
                  System.Web, Version=2.0.0.0, Culture=neutral, 
                  PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
</system.webServer>

Utilisation du module de Url Routing : http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx.

Exemple d'utilisation dans Visual Studio

L'initialisation et la définition des modèles de URL se fait dans le fichier Global.asax. Voici un exemple :

    
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }    
    
    void RegisterRoutes(RouteCollection routes)
    {
        Route r = null;        

        routes.Add(new Route("favicon.ico", new StopRoutingHandler()));        
        routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));        
        routes.Add(new Route("{service}.asmx/{*path}", new StopRoutingHandler())); 
           
        r = new Route("{Culture}/evenements", new PageRouteHandler("~/evenement-liste.aspx"));        
        r.Constraints = new RouteValueDictionary { { "Culture", "[a-z]{2}" } };        
        routes.Add("evenement-liste", r);        
        
        r = new Route("{Culture}/evenements/{Annee}", new PageRouteHandler("~/evenement-liste.aspx"));        
        r.Constraints = new RouteValueDictionary { { "Culture", "[a-z]{2}" }, { "Annee", @"\d{4}" } };        
        routes.Add("evenement-annee", r);        
        
        r = new Route("{Culture}/evenements/{Annee}/{Mois}", new PageRouteHandler("~/evenement-liste.aspx"));        
        r.Constraints = new RouteValueDictionary { { "Culture", "[a-z]{2}" }, { "Annee", @"\d{4}" }, { "Mois", @"\d{2}" } };  
        routes.Add("evenement-annee-mois", r);
    }

Construction de l'adresse URL
Pour créer un lien, nous utilisons la collection de modèle générée lors de l'application startup (Global.asax).

VirtualPathData pathData = 
    RouteTable.Routes.GetVirtualPath(
                  null,
                  "evenement-liste",
                  new RouteValueDictionary { { "Culture", "fr" } });

return pathData.VirtualPath;

À 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