<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx</link><description>Soit la méthode de ma couche business suivante: IQueryable &amp;lt; Customer &amp;gt; GetCustomers() { return from c in dc.Customers select c; } J'aimerai fournir à ma couche présentation l'accès à cette méthode afin d'offrir la possibilité de lister le clients</description><dc:language>fr</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4051959</link><pubDate>Thu, 26 Jul 2007 02:35:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4051959</guid><dc:creator>Florent</dc:creator><description>&lt;p&gt;J'ai propos&amp;#233;:&lt;/p&gt;
&lt;p&gt;Cr&amp;#233;&amp;#233;r une liste de Customers interm&amp;#233;diaire pour faire une copie en m&amp;#233;moire de la requ&amp;#234;te issue de l'objet m&amp;#233;tier.&lt;/p&gt;
&lt;p&gt;List&amp;lt;Customer&amp;gt; GetCustomer() { return q.ToList(); }&lt;/p&gt;
&lt;p&gt;Pour pouvoir ensuite la manipuler et la filtrer librement avec un .FindAll et un jolie predicate.&lt;/p&gt;
&lt;p&gt;Mais tu m'as dit que c'&amp;#233;tait pas la meilleure solution :)&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4054145</link><pubDate>Thu, 26 Jul 2007 07:38:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4054145</guid><dc:creator>Mitsu</dc:creator><description>&lt;p&gt;En effet, peupler une collection une fois pour toute en parcourant l'&amp;#233;num&amp;#233;ration nous fait quitter le monde de Linq to Sql pour se retrouver avec une simple collection m&amp;#233;moire et toute l'artillerie de Linq to Objects. C'est donc UNE solution.&lt;/p&gt;
&lt;p&gt;Cependant, retarder l'ex&amp;#233;cution de la requ&amp;#234;te &amp;#224; travers toutes les couches de l'architecture reste tr&amp;#232;s tentant et bien plus efficace au niveau des objects allou&amp;#233;s.&lt;/p&gt;
&lt;p&gt;Donc en effet, on peut faire mieux.&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4058277</link><pubDate>Thu, 26 Jul 2007 11:01:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4058277</guid><dc:creator>Matthieu MEZIL</dc:creator><description>&lt;p&gt;private IQueryable&amp;lt;Customer&amp;gt; GetCustomersQueryable()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from c in dc.Customers&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select c;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public IEnumerable&amp;lt;Customer&amp;gt; GetCustomers()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return GetCustomersQueryable().AsEnumerable();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4059245</link><pubDate>Thu, 26 Jul 2007 12:29:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4059245</guid><dc:creator>Matthieu MEZIL</dc:creator><description>&lt;p&gt;Florent, je repensais &amp;#224; ton histoire de liste.&lt;/p&gt;
&lt;p&gt;Tu auras un autre probl&amp;#232;me avec ta liste. Si les donn&amp;#233;es de ta BD sont modifi&amp;#233;es, ta liste ne sera plus &amp;#224; jour alors qu'avec une Query si.&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4062191</link><pubDate>Thu, 26 Jul 2007 14:32:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4062191</guid><dc:creator>Simon</dc:creator><description>&lt;p&gt;Attention, y'a un pi&amp;#232;ge Matthieu ^^&lt;/p&gt;
&lt;p&gt;C'est presque ca.&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4067016</link><pubDate>Thu, 26 Jul 2007 18:23:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4067016</guid><dc:creator>Mitsu</dc:creator><description>&lt;p&gt;En effet Matthieu,&lt;/p&gt;
&lt;p&gt;Ton code fonctionne bien car d&amp;#233;sormais les extensions sur GetCustomers() seront bien en m&amp;#233;moire mais cette couche est mal isol&amp;#233;e car rien ne m'emp&amp;#234;che de recaster en IQueryable.&lt;/p&gt;
&lt;p&gt;var q = GetCustomer() as IQueryable&amp;lt;Customer&amp;gt;;&lt;/p&gt;
&lt;p&gt;q.Where(...); //sql &amp;#224; nouveau.&lt;/p&gt;
&lt;p&gt;La solution de Florent, isole bien Linq to Sql car List&amp;lt;Customer&amp;gt; n'est plus un IQueryable.&lt;/p&gt;
&lt;p&gt;La solution est &amp;#224; mi-chemin&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4067800</link><pubDate>Thu, 26 Jul 2007 19:25:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4067800</guid><dc:creator>Matthieu MEZIL</dc:creator><description>&lt;p&gt;ok et comme &amp;#231;a ?&lt;/p&gt;
&lt;p&gt;private IQueryable&amp;lt;Customer&amp;gt; GetCustomersQueryable()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; from c in dc.Customers&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; select c;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public IEnumerable&amp;lt;Customer&amp;gt; GetCustomers()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp;foreach (Customer c in GetCustomersQueryable())&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;yield return c;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4069155</link><pubDate>Thu, 26 Jul 2007 21:06:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4069155</guid><dc:creator>Mitsu</dc:creator><description>&lt;p&gt;Good point !!&lt;/p&gt;
&lt;p&gt;C'est en effet la solution.&lt;/p&gt;
&lt;p&gt;IEnumerable&amp;lt;Customer&amp;gt; GetCustomers()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;var q =&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from c in dc.Customers&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select c;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from c in q.AsEnumerable()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select c;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Le fait de r&amp;#233;&amp;#233;crire l'it&amp;#233;rateur g&amp;#233;n&amp;#232;re une nouvelle classe qui impl&amp;#233;mente uniqueme IEnumerable&amp;lt;T&amp;gt; sans &amp;#234;tre IQueryable&amp;lt;T&amp;gt;. Le code est l&amp;#233;g&amp;#232;rement plus cons&amp;#233;quent puis qu'il y a un it&amp;#233;rateur suppl&amp;#233;mentaire mais nous conservons les avantages de l'ex&amp;#233;cution tardive de la requ&amp;#234;te sans cr&amp;#233;er de collection interm&amp;#233;diaire.&lt;/p&gt;
&lt;p&gt;Qui veut encore des Quizz ? :p&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4069419</link><pubDate>Thu, 26 Jul 2007 21:24:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4069419</guid><dc:creator>Florent</dc:creator><description>&lt;p&gt;Next please!&lt;/p&gt;</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4069534</link><pubDate>Thu, 26 Jul 2007 21:31:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4069534</guid><dc:creator>Simon</dc:creator><description>&lt;p&gt;Ouais, des quizz, je veux des quizz bien tordus ! ^^&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4076331</link><pubDate>Fri, 27 Jul 2007 10:24:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4076331</guid><dc:creator>Thomas Lebrun</dc:creator><description>&lt;p&gt;Pas mal: j'&amp;#233;tait partit sur la m&amp;#234;me premi&amp;#232;re id&amp;#233;e que Matthieu. Comme quoi, faut faire attention :)&lt;/p&gt;
&lt;p&gt;Allez Mitsu, des quizz, des quizz !! :)&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4077771</link><pubDate>Fri, 27 Jul 2007 12:38:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4077771</guid><dc:creator>Matthieu MEZIL</dc:creator><description>&lt;p&gt;Les quizz sont super int&amp;#233;ressants car ils permettent de confronter les diff&amp;#233;rentes id&amp;#233;es personnes qui y participent et, de plus, ils permettent de progresser avec des questions dont on ignore la r&amp;#233;ponse. Donc oui 100% pour que tu continues dans ce sens. :)&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4082075</link><pubDate>Fri, 27 Jul 2007 18:27:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4082075</guid><dc:creator>Matthieu MEZIL</dc:creator><description>&lt;p&gt;A mon tour de lancer un quizz : &lt;a rel="nofollow" target="_new" href="http://blog.developpez.com/index.php?blog=121&amp;amp;title=a_mon_tour_de_lancer_un_quizz&amp;amp;more=1&amp;amp;c=1&amp;amp;tb=1&amp;amp;pb=1"&gt;http://blog.developpez.com/index.php?blog=121&amp;amp;title=a_mon_tour_de_lancer_un_quizz&amp;amp;more=1&amp;amp;c=1&amp;amp;tb=1&amp;amp;pb=1&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Geek quizz !</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#4416895</link><pubDate>Thu, 16 Aug 2007 18:32:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4416895</guid><dc:creator>Mitsuru FURUTA - Microsoft FRANCE</dc:creator><description>&lt;p&gt;Petite question amusante sur C# 3: Le framework 3.5 apporte la m&amp;#233;thode AsEnumerable. Quel est donc l'int&amp;#233;r&amp;#234;t&lt;/p&gt;
</description></item><item><title>re: Geek quizz II: comment stopper l'imbrication des expressions Linq to Sql ?</title><link>http://blogs.msdn.com/mitsufu/archive/2007/07/26/geek-quizz-ii-comment-stopper-l-imbrication-des-expressions-linq-to-sql.aspx#9915623</link><pubDate>Sat, 31 Oct 2009 09:22:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9915623</guid><dc:creator>Nicolas Lehuen</dc:creator><description>&lt;p&gt;Salut Mitsu,&lt;/p&gt;
&lt;p&gt;Des heures de discussion avec Daniel G. sur ce sujet... Faut-il ou ne faut-il pas isoler les deux mondes ? Si la couche de pr&amp;#233;sentation fait du Linq, soit elle se retrouve &amp;#224; construire des requ&amp;#234;tes SQL sans le savoir, soit elle se retrouve &amp;#224; filtrer des &amp;#233;num&amp;#233;rations, c'est &amp;#224; dire &amp;#224; refaire c&amp;#244;t&amp;#233; pr&amp;#233;sentation du travail que devrait faire la BDD, avec tout ce que &amp;#231;a veut dire en terme de perfs...&lt;/p&gt;
&lt;p&gt;Ton astuce de reconstruire un it&amp;#233;rateur au lieu de tout monter en m&amp;#233;moire est d&amp;#233;j&amp;#224; un grand progr&amp;#232;s. Mais dans ton exemple, mettons que le premier client habitant &amp;#224; Londres soit le 1 000 001 &amp;#232;me de la table ; en isolant on perd l'intelligence de la BDD, la possibilit&amp;#233; d'utiliser un index de la BDD, on se retrouve &amp;#224; parcourir un million d'enregistrement avec tout ce que &amp;#231;a veut dire comme transfert entre la BDD et le serveur de pr&amp;#233;sentation. Pour moi c'est bien plus nuisible qu'une br&amp;#232;che dans la sacro-sainte isolation entre le M et le V du MVC.&lt;/p&gt;
&lt;p&gt;Alors &amp;#233;videmment, la solution c'est de n'exposer &amp;#224; la couche de pr&amp;#233;sentation que des &amp;#233;num&amp;#233;rateurs &amp;quot;petits&amp;quot;, c'est &amp;#224; dire pr&amp;#233;macher le travail dans la couche m&amp;#233;tier de mani&amp;#232;re &amp;#224; ce qu'en aucun cas la couche de pr&amp;#233;sentation ne se retrouve &amp;#224; devoir it&amp;#233;rer sur de gros jeux de r&amp;#233;sultats. Mais au final je suis super admiratif de ce que Microsoft a fait avec Linq (&amp;#224; des ann&amp;#233;es lumi&amp;#232;re de ce qu'on trouve c&amp;#244;t&amp;#233; Java, oui c'est moi qui dit &amp;#231;a) et je trouve dommage de se priver de ses capacit&amp;#233;s.&lt;/p&gt;
&lt;p&gt;Sur le projet sur lequel nous travaillons actuellement avec Daniel, le client impose l'utilisation de proc&amp;#233;dures stock&amp;#233;es pour acc&amp;#233;der &amp;#224; la BDD, ce qui tranche le d&amp;#233;bat &amp;nbsp;(interdit de g&amp;#233;n&amp;#233;rer des requ&amp;#234;tes &amp;#224; la vol&amp;#233;e), mais dans un monde plus libre, &amp;#224; tout prendre, je pr&amp;#233;f&amp;#232;rerais ne pas isoler et manipuler directement l'ObjectQuery, avec toute la puissance que cela induit. Ou alors il faut interdire carr&amp;#233;ment l'utilisation de Linq dans la couche de pr&amp;#233;sentation pour &amp;#233;viter le genre de probl&amp;#232;me indiqu&amp;#233; ci-dessus :)&lt;/p&gt;
&lt;p&gt;@+&lt;/p&gt;
&lt;p&gt;Nicolas&lt;/p&gt;
</description></item></channel></rss>