<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jérôme Lambert &#187; C#</title>
	<atom:link href="https://blog.developpez.com/jerome/pcategory/c/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/jerome</link>
	<description>My Microsoft Development World</description>
	<lastBuildDate>Mon, 17 Dec 2012 11:34:42 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Article : les nouveautés de C# 5.0</title>
		<link>https://blog.developpez.com/jerome/p11237/net/article_les_nouveautes_de_c_5_0</link>
		<comments>https://blog.developpez.com/jerome/p11237/net/article_les_nouveautes_de_c_5_0#comments</comments>
		<pubDate>Wed, 22 Aug 2012 08:44:19 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voila un court billet pour relayer mon dernier article publié sur developpez.com et qui est consacré aux nouveautés de C# 5.0. Vous pourrez y découvrir les deux principales nouveautés que sont await/async et les attributs Caller Information. Suite à l’actualité de la semaine dernière, n’oubliez pas que Microsoft a mis à disposition la version finale, RTM, de Visual Studio 2012. Télécharger Visual Studio 2012 express et trial gratuitement ! Bonne lecture et bons tests !]]></description>
				<content:encoded><![CDATA[<p>Voila un court billet pour relayer mon dernier article publié sur developpez.com et qui est consacré aux <a href="http://jlambert.developpez.com/tutoriels/dotnet/nouveautes-csharp-5/">nouveautés de C# 5.0</a>. Vous pourrez y découvrir les deux principales nouveautés que sont await/async et les attributs Caller Information.</p>
<p>Suite à l’actualité de la semaine dernière, n’oubliez pas que Microsoft a mis à disposition la version finale, RTM, de Visual Studio 2012.</p>
<p><a href="http://www.microsoft.com/visualstudio/11/en-us"><strong><span style="color: #68217a;">Télécharger Visual Studio 2012 express et trial gratuitement !</span></strong></a></p>
<p>Bonne lecture et bons tests !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#4 Les opérateurs de requête Linq de Aggregate à Where : SequenceEqual</title>
		<link>https://blog.developpez.com/jerome/p8113/net/4_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8113/net/4_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Sun, 27 Sep 2009 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est officiel, les vacances sont finies et donc retour difficile à la réalité mais c&#8217;est quand même avec grand plaisir que je reprends du service avec cette série d&#8217;astuces sur Linq Pour recommencer, on va y aller en douceur en abordant l&#8217;opérateur SequenceEqual. Alors. Comment faîtes-vous pour déterminer si deux listes ont les mêmes éléments ? (je parle bien des mêmes instances) Quelque chose comme ceci ? var membres1 = GetMembresDeveloppez(); var membres2 = GetMembresDeveloppez(); [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C&rsquo;est officiel, les vacances sont finies et donc retour difficile à la réalité mais c&rsquo;est quand même avec grand plaisir que je reprends du service avec cette série d&rsquo;astuces sur Linq <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Pour recommencer, on va y aller en douceur en abordant l&rsquo;opérateur <strong>SequenceEqual</strong>.</p>
<p>Alors. Comment faîtes-vous pour déterminer si deux listes ont les mêmes éléments ? (je parle bien des mêmes instances)</p>
<p>Quelque chose comme ceci ?</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">var</font><font color="#000000"> membres1 = GetMembresDeveloppez();          <br /></font><font color="#0000ff">var</font><font color="#000000"> membres2 = GetMembresDeveloppez();          </p>
<p></font><font color="#0000ff">if</font><font color="#000000"> (membres1.Count == membres2.Count)          <br />{           <br />        </font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#0000ff">var</font><font color="#000000"> currentMembre </font><font color="#0000ff">in</font><font color="#000000"> membres1)          <br />        {           <br />                </font><font color="#0000ff">if</font><font color="#000000"> (membres2.Contains(currentMembre) == </font><font color="#0000ff">false</font><font color="#000000">)          <br />                        </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">false</font><font color="#000000">;          <br />        }           </p>
<p>        </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">true</font><font color="#000000">;          <br />}           <br /></font><font color="#0000ff">else          <br /></font><font color="#000000">{          <br />        </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">false</font><font color="#000000">;          <br />}</font></font> </div>
</p></div>
<p>Avec Linq, l&rsquo;opérateur SequenceEqual s&rsquo;occupera de faire toute la comparaison pour vous :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">var</font><font color="#000000"> membres1 = GetMembresDeveloppez();          <br /></font><font color="#0000ff">var</font><font color="#000000"> membres2 = GetMembresDeveloppez();          </p>
<p></font><font color="#0000ff">bool</font><font color="#000000"> result1 = membres1.SequenceEqual(membres2); </font><font color="#008000">// Faux          <br /></font><font color="#0000ff">bool</font><font color="#000000"> result2 = membres1.SequenceEqual(membres1); </font><font color="#008000">// Vrai          <br /></font><font color="#0000ff">bool</font><font color="#000000"> result3 = membres1.SequenceEqual(membres1.ToList()); </font><font color="#008000">// Vrai</font></font> </div>
</p></div>
<p>Facile ? <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Nouvel article : Présentation de la classe Tuple du .NET Framework 4</title>
		<link>https://blog.developpez.com/jerome/p8507/net/nouvel_article_presentation_de_la_classe_4</link>
		<comments>https://blog.developpez.com/jerome/p8507/net/nouvel_article_presentation_de_la_classe_4#comments</comments>
		<pubDate>Tue, 12 Jan 2010 09:07:27 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Avec l&#8217;arrivée du .NET Framework 4 de Microsoft, de nombreuses classes ont été introduites. Une de ces classes est la classe &#171;&#160;System.Tuple&#160;&#187; et qui permet de stocker un ensemble d&#8217;éléments de types différents tout en gardant une sécurité au niveau du typage grâce à la généricité. L&#8217;avantage est que vous allez pouvoir utiliser ce type en retour ou comme argument de vos méthodes. Les développeurs Python devraient déjà comprendre de quoi je parle. Pour les [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Avec l&rsquo;arrivée du .NET Framework 4 de Microsoft, de nombreuses classes ont été introduites. Une de ces classes est la classe &laquo;&nbsp;System.Tuple&nbsp;&raquo; et qui permet de stocker un ensemble d&rsquo;éléments de types différents tout en gardant une sécurité au niveau du typage grâce à la généricité. L&rsquo;avantage est que vous allez pouvoir utiliser ce type en retour ou comme argument de vos méthodes. Les développeurs Python devraient déjà comprendre de quoi je parle. Pour les autres, vous pourrez découvrir cette classe plus en détails dans le dernier article que je viens d&rsquo;écrire et qui s&rsquo;intitule &laquo;&nbsp;<strong>Présentation de la classe Tuple du .NET Framework 4</strong>&laquo;&nbsp;.</p>
<ul>
<li><a href="http://jlambert.developpez.com/tutoriels/dotnet/presentation-classe-tuple-net-framework-4/">Lien vers l&rsquo;article</a></li>
<li><a href="http://www.developpez.net/forums/d860959/dotnet/general-dotnet/framework/article-presentation-classe-tuple-net-framework-4-a/">Lien pour vos commentaires</a></li>
</ul>
<p>Bonne lecture !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#9 Les opérateurs de requête Linq de Aggregate à Where : Single &amp; SingleOrDefault</title>
		<link>https://blog.developpez.com/jerome/p8181/net/9_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8181/net/9_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Sun, 11 Oct 2009 23:30:50 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aujourd&#8217;hui pour bien commencer la semaine, on va aborder deux opérateurs que j&#8217;affectionne tout particulièrement : Single et SingleOrDefault. Pour ces opérateurs, on va devoir préciser notre classe MembreDeveloppez en y ajoutant un champ ID qui représente un identifiant unique pour chaque membre de developpez.com. public class MembreDeveloppez : IComparable&#60;MembreDeveloppez&#62; {         public int ID { get; set; }         public string Nom { get; set; }         public int NombreMessages { get; set; }         // &#8230; } Et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Aujourd&rsquo;hui pour bien commencer la semaine, on va aborder deux opérateurs que j&rsquo;affectionne tout particulièrement : <strong>Single</strong> et <strong>SingleOrDefault</strong>.</p>
<p>Pour ces opérateurs, on va devoir préciser notre classe <em>MembreDeveloppez</em> en y ajoutant un champ <em>ID</em> qui représente un identifiant unique pour chaque membre de developpez.com.</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">class</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> : </font><font color="#2b91af">IComparable&lt;</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000">         <br />{          <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> ID { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">string</font><font color="#000000"> Nom { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> NombreMessages { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         </p>
<p>        </font><font color="#008000">// &#8230;</font><font color="#000000">         <br />}</font></font> </div>
</p></div>
<p>Et au passage, voici la nouvelle implémentation de la méthode <em>GetMembresDeveloppez()</em> qui (pour ceux qui n&rsquo;auraient pas suivi) retourne une liste d&rsquo;instances de la classe MembreDeveloppez :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">static</font><font color="#000000"> </font><font color="#2b91af">List</font>&lt;<font color="#2b91af">MembreDeveloppez</font><font color="#000000">&gt; GetMembresDeveloppez()         <br />{          <br />        </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">List</font>&lt;<font color="#2b91af">MembreDeveloppez</font><font color="#000000">&gt;()  <br />        {  <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=1, Nom=</font><font color="#a31515">&laquo;&nbsp;Jérôme Lambert&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 3000},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=2, Nom=</font><font color="#a31515">&laquo;&nbsp;Louis-Guillaume Morand&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 2500},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=3, Nom=</font><font color="#a31515">&laquo;&nbsp;Aspic&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 1200},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=4, Nom=</font><font color="#a31515">&laquo;&nbsp;Dev01&Prime;</font><font color="#000000">, NombreMessages = 530},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=5, Nom=</font><font color="#a31515">&laquo;&nbsp;Giovanny Temgoua&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 8300},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=6, Nom=</font><font color="#a31515">&laquo;&nbsp;LefortLudovic&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 1200},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=7, Nom=</font><font color="#a31515">&laquo;&nbsp;nico-pyright(c)&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 660},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=8, Nom=</font><font color="#a31515">&laquo;&nbsp;Skyounet&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 4300},         <br />                </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">(){ ID=9, Nom=</font><font color="#a31515">&laquo;&nbsp;Smyley&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 2200}         <br />                </font><font color="#008000">// &#8230;</font><font color="#000000">         <br />        };          <br />}</font></font> </div>
</p></div>
<p>Maintenant la question du jour : comment feriez-vous pour récupérer un membre de developpez.com sur base de son identifiant ? On va prendre comme exemple le membre <strong>Skyounet</strong> avec l&rsquo;identifiant <strong>8</strong>.</p>
<p>J&rsquo;ai l&rsquo;impression que certains, qui ont suivi cette série de billets depuis le début, ont envie de proposer une solution avec l&rsquo;opérateur <strong><a href="http://blog.developpez.com/jerome/p7933/net/2-les-operateurs-de-requete-linq-de-aggr/" target="_blank">First</a></strong> (voir <strong><a href="http://blog.developpez.com/jerome/p7933/net/2-les-operateurs-de-requete-linq-de-aggr/" target="_blank">FirstOrDefault</a></strong>) :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">var</font><font color="#000000"> membres = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         </p>
<p>SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreID8 = membres.First(membre => membre.ID == 8);</font></font> </div>
</p></div>
<p>Et bien pas de chance mais ce n&rsquo;est pas tout à fait juste car on parle bien d&rsquo;identifiant <strong><u>unique</u></strong>. Or avec l&rsquo;opérateur <strong>First</strong> (ou <strong>FirstOrDefault</strong>), on récupère que le premier élément de la séquence résultante, or, si notre séquence venait à contenir plus d&rsquo;un membre avec l&rsquo;identifiant 8, il y aurait un réel problème au niveau de l&rsquo;intégrité de vos données et pire encore, vous auriez fermé les yeux face à ce cas.</p>
<p>Le code suivant va donc s&rsquo;exécuter correctement mais vous passerez à côté du fait que deux membres ont l&rsquo;identifiant 8 :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">var</font><font color="#000000"> membres = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         <br />membres.Add(</font><font color="#0000ff">new</font><font color="#000000"> SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">() { ID = 8, Nom = </font><font color="#a31515">&laquo;&nbsp;Inconnu numéro 8&Prime;</font><font color="#000000">, NombreMessages = 0 });         </p>
<p>SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreID8 = membres.First(membre => membre.ID == 8);</font></font> </div>
</p></div>
<p>C&rsquo;est là que notre opérateur <strong>Single</strong> va être intéressant car il renverra une exception dans deux cas :</p>
<ol>
<li>Lorsqu&rsquo;il n&rsquo;y aura pas d&rsquo;élément dans notre résultat (comme avec First d&rsquo;ailleurs)</li>
<li>Lorsqu&rsquo;il y aura plus d&rsquo;un élément dans notre résultat !</li>
</ol>
<p>Le second cas répond donc exactement à notre problématique :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">var</font><font color="#000000"> membres = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         <br />membres.Add(</font><font color="#0000ff">new</font><font color="#000000"> SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">() { ID = 8, Nom = </font><font color="#a31515">&laquo;&nbsp;Inconnu numéro 8&Prime;</font><font color="#000000">, NombreMessages = 0 });         </p>
<p></font><font color="#0000ff">try         <br /></font><font color="#000000">{         <br />        SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreID7 = membres.Single(membre => membre.ID == 7);         <br />        </font><font color="#008000">//SampleLibrary.MembreDeveloppez membreID8 = membres.Single(membre => membre.ID == 8); // => Génère une exception         <br /></font><font color="#000000">        </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Le membre avec l&rsquo;identifiant 8 est {0}&nbsp;&raquo;</font><font color="#000000">, membreID7.Nom);         <br />}          <br /></font><font color="#0000ff">catch</font><font color="#000000"> (System.</font><font color="#2b91af">Exception</font><font color="#000000"> exc)         <br />{          <br />        </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;La requête n&rsquo;a pas renvoyé un et un seul membre.&nbsp;&raquo;</font><font color="#000000">);         <br />}</font></font> </div>
</p></div>
<p>Pour ce qui est de l&rsquo;opérateur <strong>SingleOrDefault</strong>, il se comporte comme <strong>Single</strong> excepté le fait qu&rsquo;il renverra <em>null</em> lorsque le résultat n&rsquo;aura pas d&rsquo;élément (contrairement à <strong>Single</strong> qui génèrera une exception).</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">try         <br /></font><font color="#000000">{         <br />        SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreID1000 = membres.SingleOrDefault(membre => membre.ID == 1000);         <br />        </font><font color="#0000ff">if</font><font color="#000000"> (membreID1000 != </font><font color="#0000ff">null</font><font color="#000000">)         <br />        {          <br />                </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Le membre avec l&rsquo;identifiant 1000 est {0}&nbsp;&raquo;</font><font color="#000000">, membreID1000.Nom);         <br />        }          <br />        </font><font color="#0000ff">else         <br /></font><font color="#000000">        {         <br />                </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Il n&rsquo;existe pas de membre avec l&rsquo;identifiant 1000.&nbsp;&raquo;</font><font color="#000000">);         <br />        }          <br />}          <br /></font><font color="#0000ff">catch</font><font color="#000000"> (System.</font><font color="#2b91af">Exception</font><font color="#000000"> exc)         <br />{          <br />        </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;La requête n&rsquo;a pas renvoyé un et un seul membre.&nbsp;&raquo;</font><font color="#000000">);         <br />}</font></font> </div>
</p></div>
</p>
<p>Alors fan ou pas ?! <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /></p>
<p> </p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>#11 Les opérateurs de requête Linq de Aggregate à Where : Concat</title>
		<link>https://blog.developpez.com/jerome/p8197/net/11_les_operateurs_de_requete_linq_de_agg</link>
		<comments>https://blog.developpez.com/jerome/p8197/net/11_les_operateurs_de_requete_linq_de_agg#comments</comments>
		<pubDate>Tue, 13 Oct 2009 23:58:04 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[On entame le milieu de la semaine et pour se motiver un peu plus, rien de tel qu&#8217;un second billet sur les opérateurs Linq et en plus, ça ne va pas être compliqué. L&#8217;opérateur de ce billet est Concat ! Imaginez que vous avez deux listes et que vous désirez n&#8217;en faire qu&#8217;une seule qui regrouperait les éléments de la première liste avec les éléments de la seconde liste : comment procéderiez-vous ? Le facile [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On entame le milieu de la semaine et pour se motiver un peu plus, rien de tel qu&rsquo;un <a href="http://blog.developpez.com/jerome/p8196/net/10-les-operateurs-de-requete-linq-de-agg/"><strong>second billet sur les opérateurs Linq</strong></a> et en plus, ça ne va pas être compliqué. L&rsquo;opérateur de ce billet est <strong>Concat</strong> !</p>
<p>Imaginez que vous avez deux listes et que vous désirez n&rsquo;en faire qu&rsquo;une seule qui regrouperait les éléments de la première liste avec les éléments de la seconde liste : comment procéderiez-vous ?</p>
<p>Le facile est surement d&rsquo;utiliser la méthode AddRange disponible sur une liste, ainsi vous avez surement pensez à quelque chose de ce genre :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> </font></font></font><font color="#000000">listeMembres1 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();          <br /></font><font color="#0000ff"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> </font></font></font><font color="#000000">listeMembres2 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();          </p>
<p></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembreResult = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000">();          </p>
<p>listeMembreResult.AddRange(listeMembres1);           <br />listeMembreResult.AddRange(listeMembres2);</font></font> </div>
</p></div>
</p>
<p>Grâce à la méthode <strong>Concat</strong> de Linq, vous allez pouvoir concaténer deux listes d&rsquo;objets pour n&rsquo;en faire qu&rsquo;une seule. Je dis liste mais ça fonctionnerait avec n&rsquo;importe quelle collection/séquence tant qu&rsquo;elle implémente <em>IEnumerable</em> ou <em>IEnumerable&lt;T&gt;</em>.</p>
</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembres1 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         <br /></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembres2 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         </p>
<p></font><font color="#0000ff">var</font><font color="#000000"> query = listeMembres1.Concat(listeMembres2);         </p>
<p></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembresResult1 = query.ToList();</font></font> </div>
</p></div>
<p>Comme vous pouvez le remarquer, j&rsquo;ai utilisé l&rsquo;opérateur <strong><a href="http://blog.developpez.com/jerome/p8196/net/10-les-operateurs-de-requete-linq-de-agg/">ToList</a></strong> (que nous avons déjà vu lors d&rsquo;un autre billet) après l&rsquo;opérateur <strong>Concat</strong> pour obtenir mes objets dans une liste. La raison est que l&rsquo;opérateur <strong>Concat</strong> renvoie un <em>IEnumerable&lt;T&gt;</em>. En fait pour être plus précis, on récupère un <em>ConcatIterator&lt;T&gt;</em>.</p>
<p><a href="http://blog.developpez.com/media/130/WindowsLiveWriter/9LesoprateursderequteLinqdeAggregateWher_54D/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="left" src="http://blog.developpez.com/media/130/WindowsLiveWriter/9LesoprateursderequteLinqdeAggregateWher_54D/image_thumb.png" width="565" height="104" /></a> </p>
<p> </p>
<p> </p>
<p> </p>
<p>L&rsquo;opérateur <strong>Concat</strong> ne crée donc pas directement une séquence avec le bon résultat mais va tout simplement s&rsquo;occuper de mémoriser les séquences à concaténer et ce n&rsquo;est qu&rsquo;à la demande que le résultat sera exécuté (par exemple lors d&rsquo;un <strong>foreach</strong> ou comme dans notre cas lors de l&rsquo;utilisation de l&rsquo;opérateur <strong>ToList</strong>. On appelle ça l&rsquo;exécution différée.</p>
<p>Pour le prouver, on va modifier légèrement le code pour ajouter un nouvel élément dans listeMembre1 après avoir créé la requête de concaténation.</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembres1 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         <br /></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembres2 = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();         </p>
<p></font><font color="#0000ff">var</font><font color="#000000"> query = listeMembres1.Concat(listeMembres2);         </p>
<p></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembresResult1 = query.ToList();         </p>
<p>listeMembres1.Add(</font><font color="#0000ff">new</font><font color="#000000"> SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">() { Nom = </font><font color="#a31515">&laquo;&nbsp;Marc Lussac&nbsp;&raquo;</font><font color="#000000">, NombreMessages = 23000 });         </p>
<p></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> listeMembresResult2 = query.ToList();</font></font> </div>
</p></div>
<p>Si vous essayez ce code, vous vous apercevrez que listeMembresResult2 contient un élément de plus que listeMembresResult1.</p>
</p>
<p>Je pense que pour un opérateur dit facile, on est allé assez dans le détail.</p>
<p>Rendez-vous au prochain numéro !</p>
<p> </p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#10 Les opérateurs de requête Linq de Aggregate à Where : ToArray &amp; ToList</title>
		<link>https://blog.developpez.com/jerome/p8196/net/10_les_operateurs_de_requete_linq_de_agg</link>
		<comments>https://blog.developpez.com/jerome/p8196/net/10_les_operateurs_de_requete_linq_de_agg#comments</comments>
		<pubDate>Tue, 13 Oct 2009 23:47:28 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ca y est, nous venons de franchir le 10e billet de la série &#171;&#160;Les opérateurs de requête Linq de Aggregate à Where&#171;&#160;. Je suis assez satisfait de voir que ça avance mais il reste encore pas mal d&#8217;opérateurs à voir ! Ne perdons pas de temps et pour aujourd&#8217;hui, nous allons aborder les opérateurs ToArray &#38; ToList. Prenons le cas de notre liste d&#8217;instances de la classe MembreDeveloppez : List&#60;SampleLibrary.MembreDeveloppez&#62; membres = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez(); Comment feriez-vous [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ca y est, nous venons de franchir le 10e billet de la série &laquo;&nbsp;<em><strong>Les opérateurs de requête Linq de Aggregate à Where</strong></em>&laquo;&nbsp;. Je suis assez satisfait de voir que ça avance mais il reste encore pas mal d&rsquo;opérateurs à voir ! Ne perdons pas de temps et pour aujourd&rsquo;hui, nous allons aborder les opérateurs <strong>ToArray</strong> &amp; <strong>ToList</strong>.</p>
<p>Prenons le cas de notre liste d&rsquo;instances de la classe <em>MembreDeveloppez</em> :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> membres = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();</font></font> </div>
</p></div>
</p>
<p>Comment feriez-vous pour transférer vos instances dans un tableau ? (le tableau étant un <em>MembreDeveloppez[]</em>)</p>
<p>Par exemple, vous pourriez avoir pensé à ce code :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">[] membresToArray = </font><font color="#0000ff">new</font><font color="#000000"> SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">[membres.Count];         <br /></font><font color="#0000ff">for</font><font color="#000000"> (</font><font color="#0000ff">int</font><font color="#000000"> i = 0; i &lt; membres.Count; i++)         <br />{          <br />        membresToArray[i] = membres[i];          <br />}</font></font> </div>
</p></div>
<p>Et bien, il y a beaucoup plus simple à présent grâce à l&rsquo;opérateur <strong>ToArray</strong> ! Fini les boucles, une seule ligne de code sera nécessaire :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">[] membresToArray = membres.ToArray();</font></font> </div>
</p></div>
<p>Et le contraire est possible grâce à l&rsquo;opérateur <strong>ToList</strong> qui vous permettra d&rsquo;obtenir une liste typée (dans notre cas nous aurons List&lt;MembreDeveloppez&gt;).</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> membresToList = membresToArray.ToList();</font></font> </div>
</p></div>
<p>A chaque utilisation de <strong>ToArray</strong> ou <strong>ToList</strong>, c&rsquo;est une nouvelle instance de tableau ou de liste typée qui est instanciée et évidemment, les éléments contenus sont les mêmes que dans la séquence source (ce sont donc les mêmes références). Si vous ne m&rsquo;avez pas compris, regardez le bout de code ci-dessous :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#2b91af">List&lt;</font><font color="#000000">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000"> membres = SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000">.GetMembresDeveloppez();</font><font color="#000000">         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Est-ce que la liste source est la même que la liste créée avec l&rsquo;opérateur ToList ? {0}&nbsp;&raquo;</font><font color="#000000">, membres == membres.ToList());         <br /></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Est-ce que le premier élément de la liste source est le même que celui de la liste créée avec l&rsquo;opérateur ToList ? {0}&nbsp;&raquo;</font><font color="#000000">, membres[0] == membres.ToList()[0]);</font></font> </div>
</p></div>
<p>Ce qui donnera à l&rsquo;exécution :</p>
<blockquote><p>Est-ce que la liste source est la même que la liste créée avec l&rsquo;opérateur ToList ? <strong><font color="#ff0000">False</font></strong>      <br />Est-ce que le premier élément de la liste source est le même que celui de la liste créée avec l&rsquo;opérateur ToList ? <strong><font color="#008000">True</font></strong></p>
</blockquote>
<p>Sachez aussi que les opérateurs (comme d&rsquo;ailleurs tous les autres opérateurs Linq) peuvent être utilisés sur n&rsquo;importe quelles collections d&rsquo;objets à condition qu&rsquo;elle implémente l&rsquo;interface <strong>IEnumerable&lt;T&gt;</strong>.</p>
<p>Bon Linq !</p>
<p> </p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#8 Les opérateurs de requête Linq de Aggregate à Where : Last &amp; LastOrDefault</title>
		<link>https://blog.developpez.com/jerome/p8158/net/8_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8158/net/8_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Tue, 06 Oct 2009 00:03:05 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ne dîtes rien, je vous entends déjà dire : &#171;&#160;Oh non, pas encore lui avec son Steve Ballmer qui sera là demain à Paris ! Y en a marre d&#8217;entendre la même musique !!!&#171;&#160;. Et vous avez raison ! Rassurez-vous, ce n&#8217;est pas cette histoire qui va nous empêcher de parler des opérateurs Linq et plus particulièrement des opérateurs Last &#38; LastOrDefault. Vu que c&#8217;est le début de la semaine, je vais faire un petit [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ne dîtes rien, je vous entends déjà dire : &laquo;&nbsp;<em>Oh non, pas encore lui avec son Steve Ballmer qui sera là demain à Paris ! Y en a marre d&rsquo;entendre la même musique !!!</em>&laquo;&nbsp;. Et vous avez raison ! Rassurez-vous, ce n&rsquo;est pas cette histoire qui va nous empêcher de parler des opérateurs Linq et plus particulièrement des opérateurs <strong>Last</strong> &amp; <strong>LastOrDefault</strong>.</p>
<p>Vu que c&rsquo;est le début de la semaine, je vais faire un petit rappel sur notre fameuse classe MembreDeveloppez qui depuis le temps a continuer d&rsquo;évoluer :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">class</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> : </font><font color="#2b91af">IComparable&lt;</font><font color="#2b91af">MembreDeveloppez&gt;</font><font color="#000000">         <br />{          <br />        </font><font color="#008000">// &#8230;         <br /></font><font color="#000000">        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">string</font><font color="#000000"> Nom { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> NombreMessages { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         </p>
<p>        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> CompareTo(</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> other)         <br />        {          <br />                </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">this</font><font color="#000000">.NombreMessages.CompareTo(other.NombreMessages);         <br />        }          <br /></font><font color="#000000">}</font></font> </div>
</p></div>
<p>Vous allez voir que ce nous allons aborder est assez similaire à deux opérateurs que nous avons déjà vu précédemment.</p>
<p>Nous avons toujours une liste d&rsquo;instances de la classe MembreDeveloppez et dîtes-moi comment vous feriez pour récupérer le dernier élément de cette liste ? En sachant qu&rsquo;il est y a au moins un élément dans cette liste.</p>
<p>Un Exemple :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membre = membres[membres.Count &#8211; 1];</font></font> </div>
</p></div>
<p>Avec l&rsquo;opérateur <strong>Last</strong>, vous allez pouvoir obtenir le même résultat :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membre1 = membres.Last();</font></font> </div>
</p></div>
<p>A la limite un peu moins de lettres à écrire mais on a déjà vu mieux comme évolution. Par contre, comment feriez-vous pour récupérer dans notre liste le dernier membre de Developpez.com qui a écrit au moins 3000 messages ? </p>
<p>Un cas possible :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membre = </font><font color="#0000ff">null</font><font color="#000000">;         <br /></font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#0000ff">var</font><font color="#000000"> currentMembre </font><font color="#0000ff">in</font><font color="#000000"> membres)         <br />{          <br />        </font><font color="#0000ff">if</font><font color="#000000"> (currentMembre.NombreMessages >= 3000)         <br />        {          <br />                membre = currentMembre;          <br />        }          <br />}          <br /></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;{0} est le dernier membre de notre liste qui a écrit au moins 3000 messages.&nbsp;&raquo;</font><font color="#000000">, membre.Nom);</font></font> </div>
</p></div>
<p>Avec l&rsquo;opérateur Last, on va pouvoir le faire en une seule ligne de code !</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membre2 = membres.Last(membre => membre.NombreMessages >= 3000);</font></font> </div>
</p></div>
<p>Personnellement, c&rsquo;est le style d&rsquo;écriture que j&rsquo;adore : claire et concise. <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Enfin, on va voir une dernière chose car pour rappel, il nous reste encore à illustrer l&rsquo;utilisation de l&rsquo;opérateur <strong>LastOrDefault</strong>. Si on change la contrainte de départ en considérant que notre liste pourrait être vide. Ou bien que la condition ne renvoie aucun résultat. Avec Last, on recevra une exception mais avec LastOrDefault, on récupérera la valeur nulle.</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membre3 = membres.LastOrDefault(membre => membre.NombreMessages > 100000);</font></font> </div>
</p></div>
<p>C&rsquo;est tout pour aujourd&rsquo;hui !</p>
<p> </p>
<p>J&rsquo;oubliais de vous dire. Dans quelques heures, Steve Ballmer répondra à vos questions lors des Microsoft Days à Paris dès 10h. Et pour ceux qui ne pourront pas être présent à la conférence, l&rsquo;interview sera retransmise <a href="http://msdn.microsoft.com/fr-fr/ee516734.aspx" target="_blank"><strong>en direct via Live Meeting</strong></a> ! <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /></p>
<p> </p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>#7 Les opérateurs de requête Linq de Aggregate à Where : Min &amp; Max</title>
		<link>https://blog.developpez.com/jerome/p8141/net/7_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8141/net/7_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Fri, 02 Oct 2009 00:37:00 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Et oui ! Je me suis sûrement très bien reposé (trop ?) pendant les vacances et c&#8217;est pour ça que j&#8217;attaque un second billet le même jour ! On va même découvrir deux opérateurs en même temps : Min et Max. Encore et toujours avec la classe MembreDeveloppez, comment feriez-vous pour récupérer le nombre maximum de messages écrits par un membre ? Un exemple : int maxMessages = 0; foreach (var currentMembre in membres) { [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Et oui ! Je me suis sûrement très bien reposé (trop ?) pendant les vacances et c&rsquo;est pour ça que j&rsquo;attaque <a href="http://blog.developpez.com/jerome/p8140/net/6-les-operateurs-de-requete-linq-de-aggr/">un second billet le même jour</a> ! On va même découvrir deux opérateurs en même temps : <strong>Min</strong> et <strong>Max</strong>.</p>
<p>Encore et toujours avec la classe MembreDeveloppez, comment feriez-vous pour récupérer le nombre maximum de messages écrits par un membre ?</p>
<p>Un exemple :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">int</font><font color="#000000"> maxMessages = 0;         <br /></font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#0000ff">var</font><font color="#000000"> currentMembre </font><font color="#0000ff">in</font><font color="#000000"> membres)         <br />{          <br />        </font><font color="#0000ff">if</font><font color="#000000"> (maxMessages &lt; currentMembre.NombreMessages)         <br />        {          <br />                maxMessages = currentMembre.NombreMessages;          <br />        }          <br />}          </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre maximum de messages écrits : {0}&nbsp;&raquo;</font><font color="#000000">, maxMessages);</font></font> </div>
</p></div>
<p>Avec les opérateurs Linq, on va tout simplement utiliser Max sur notre liste de membres :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">int</font><font color="#000000"> maxMessages = membres.Max(membre => membre.NombreMessages);         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre maximum de messages écrits : {0}&nbsp;&raquo;</font><font color="#000000">, maxMessages);</font></font> </div>
</p></div>
<p>Le hic dans la solution avec l&rsquo;opérateur Max, c&rsquo;est qu&rsquo;on n&rsquo;obtient pas le membre de developpez.com qui a écrit le plus de messages. Du moins, ce n&rsquo;est pas possible avec cette surcharge de l&rsquo;opérateur Max. En fait, il est possible de récupérer l&rsquo;instance MembreDeveloppez en utilisant la surcharge de Max sans aucun argument. Evidemment, il faudra implémenter l&rsquo;interface IComparable&lt;T&gt; au niveau du la classe MembreDeveloppez pour que la comparaison puisse se faire correctement.</p>
<p>On aura donc pour la classe MembreDeveloppez :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">class</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> : </font><font color="#2b91af">IComparable</font>&lt;<font color="#2b91af">MembreDeveloppez</font><font color="#000000">&gt;         <br />{          <br />        </font><font color="#008000">// &#8230;         <br /></font><font color="#000000">        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">string</font><font color="#000000"> Nom { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> NombreMessages { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         </p>
<p>        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> CompareTo(</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> other)         <br />        {          <br />                </font><font color="#0000ff">return</font><font color="#000000"> </font><font color="#0000ff">this</font><font color="#000000">.NombreMessages.CompareTo(other.NombreMessages);         <br />        }          <br /></font><font color="#000000">}</font></font> </div>
</p></div>
<p>Et au final, nous aurons :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2">SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreLePlusBavard = membres.Max();         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Le membre le plus bavard est {0} avec {1} messages.&nbsp;&raquo;</font><font color="#000000">, membreLePlusBavard.Nom, membreLePlusBavard.NombreMessages);</font></font> </div>
</p></div>
</p>
<p>Et l&rsquo;opérateur <strong>Min</strong> dans tout ça ? J&rsquo;ai honte de montrer un exemple mais par principe, je vais quand même le faire <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Donc avec l&rsquo;opérateur, on va tout simplement pouvoir récupérer la valeur minimale dans notre collection comme ceci :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">int</font><font color="#000000"> minMessages = membres.Min(membre => membre.NombreMessages);         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre minimum de messages écrits : {0}&nbsp;&raquo;</font><font color="#000000">, minMessages);         </p>
<p>SampleLibrary.</font><font color="#2b91af">MembreDeveloppez</font><font color="#000000"> membreLePlusDiscret = membres.Min();         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Le membre le plus discret est {0} avec {1} messages.&nbsp;&raquo;</font><font color="#000000">, membreLePlusDiscret.Nom, membreLePlusDiscret.NombreMessages);</font></font> </div>
</p></div>
<p>Allez, c&rsquo;est définitivement fini pour aujourd&rsquo;hui !</p>
<p>Et bon week end d&rsquo;avance <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#6 Les opérateurs de requête Linq de Aggregate à Where : Average</title>
		<link>https://blog.developpez.com/jerome/p8140/net/6_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8140/net/6_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Fri, 02 Oct 2009 00:04:34 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ca y est, il commence à y avoir un ordre cohérent dans la série des billets sur les opérateurs Linq qui vont suivre. Encore quelques ajustements et ce sera bon. En attendant, on va rester dans la lignée de l&#8217;opérateur Sum que nous avons vu dans le numéro 5 et attaquer l&#8217;opérateur Average. On reprend notre liste d&#8217;instances de la classe MembreDeveloppez et dîtes-moi comment vous feriez-vous pour obtenir la moyenne globale des messages écrits [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ca y est, il commence à y avoir un ordre cohérent dans la série des billets sur les opérateurs Linq qui vont suivre. Encore quelques ajustements et ce sera bon. En attendant, on va rester dans la lignée de l&rsquo;opérateur Sum que nous avons vu <a href="http://blog.developpez.com/jerome/p8129/net/c/5-les-operateurs-de-requete-linq-de-aggr/">dans le numéro 5</a> et attaquer l&rsquo;opérateur <strong>Average</strong>.</p>
<p>On reprend notre liste d&rsquo;instances de la classe MembreDeveloppez et dîtes-moi comment vous feriez-vous pour obtenir la moyenne globale des messages écrits par les membres de developpez.com ?</p>
<p>Facile ?! Je me doute <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">int</font><font color="#000000"> totalMessages = 0;         <br /></font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#0000ff">var</font><font color="#000000"> currentMembre </font><font color="#0000ff">in</font><font color="#000000"> membres)         <br />{          <br />        totalMessages += currentMembre.NombreMessages;          <br />}          </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre de messages moyen : {0}&nbsp;&raquo;</font><font color="#000000">, (</font><font color="#0000ff">double</font><font color="#000000">)totalMessages / membres.Count);</font></font> </div>
</p></div>
<p>Avec Linq, vous avez un opérateur qui fait tout ça pour vous : <strong>Average</strong>.</p>
<p>Ce qui nous donne :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">double</font><font color="#000000"> moyenneMessage = membres.Average(membre => membre.NombreMessages);         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre de messages moyen : {0}&nbsp;&raquo;</font><font color="#000000">, moyenneMessage);         <br /></font><font color="#2b91af">Console</font><font color="#000000">.Read();</font></font> </div>
</p></div>
<p>Et tout comme avec l&rsquo;opérateur Sum, vous pourrez utiliser cet opérateur pour calculer une moyenne avec les types suivants : int, int?, float, float?, decimal, decimal?, double, double?, long et long?.</p>
<p>Bon Linq !</p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#5 Les opérateurs de requête Linq de Aggregate à Where : Sum</title>
		<link>https://blog.developpez.com/jerome/p8129/net/5_les_operateurs_de_requete_linq_de_aggr</link>
		<comments>https://blog.developpez.com/jerome/p8129/net/5_les_operateurs_de_requete_linq_de_aggr#comments</comments>
		<pubDate>Tue, 29 Sep 2009 23:55:23 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Avant de commencer cette série de billets sur Linq, j&#8217;avais décidé d&#8217;aborder les opérateurs dans un ordre aléatoire. Plus, je regarde cet ordre aléatoire et plus je me dis qu&#8217;il va falloir remettre un ordre la dedans car il y a pas mal d&#8217;opérateurs qu&#8217;il n&#8217;est pas possible d&#8217;aborder sans en avoir vu d&#8217;autres au préalable. Enfin soit, aujourd&#8217;hui, on reste dans le facile avec l&#8217;opérateur Sum. On reprend notre classe MembreDeveloppez que voici : [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Avant de commencer cette série de billets sur Linq, j&rsquo;avais décidé d&rsquo;aborder les opérateurs dans un ordre aléatoire. Plus, je regarde cet ordre aléatoire et plus je me dis qu&rsquo;il va falloir remettre un ordre la dedans car il y a pas mal d&rsquo;opérateurs qu&rsquo;il n&rsquo;est pas possible d&rsquo;aborder sans en avoir vu d&rsquo;autres au préalable. Enfin soit, aujourd&rsquo;hui, on reste dans le facile avec l&rsquo;opérateur <strong>Sum</strong>.</p>
<p>On reprend notre classe <strong>MembreDeveloppez</strong> que voici :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">class</font><font color="#000000"> </font><font color="#2b91af">MembreDeveloppez         <br /></font><font color="#000000">{         <br />        </font><font color="#008000">// &#8230;         <br /></font><font color="#000000">        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">string</font><font color="#000000"> Nom { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />        </font><font color="#0000ff">public</font><font color="#000000"> </font><font color="#0000ff">int</font><font color="#000000"> NombreMessages { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }         <br />}</font></font> </div>
</p></div>
<p>Si vous aviez une liste d&rsquo;instances de cette classe, comment feriez-vous pour obtenir le nombre de message écrits par l&rsquo;ensemble des membres de Developpez.com ?</p>
<p>Cette solution par exemple :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#0000ff">var</font><font color="#000000"> currentMembre </font><font color="#0000ff">in</font><font color="#000000"> membres)         <br />{          <br />        totalMessage += currentMembre.NombreMessages;          <br />}          </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre de messages : {0}&nbsp;&raquo;</font><font color="#000000">, totalMessage);</font></font> </div>
</p></div>
<p>Encore une fois, il existe à présent un opérateur qui le fait déjà pour nous : <strong>Sum</strong>.</p>
<p>A présent, stop aux boucles qui font perdre du temps à nous tous, fainéants développeurs que nous sommes.</p>
</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">int</font><font color="#000000"> totalMessage = membres.Sum(membre => membre.NombreMessages);         </p>
<p></font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(</font><font color="#a31515">&laquo;&nbsp;Nombre de messages : {0}&nbsp;&raquo;</font><font color="#000000">, totalMessage);</font></font> </div>
</p></div>
<p>Vous pourrez d&rsquo;ailleurs utiliser cet opérateur pour calculer une somme avec les types suivants : int, int?, float, float?, decimal, decimal?, double, double?, long et long?.</p>
<p>C&rsquo;est tout pour aujourd&rsquo;hui <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
</p>
<p><a href="http://jlambert.developpez.com/sources/LinqOperatorsSolution.zip"><strong><font color="#008000">Téléchargez les sources (sous Visual Studio 2008)</font></strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
