<?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>Gabriel Rodriguez Plancarte &#187; LINQ</title>
	<atom:link href="http://gabrielrodriguez.net/category/linq/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabrielrodriguez.net</link>
	<description>Tecnologia, Diseño, Negocios y Desarrollo</description>
	<lastBuildDate>Mon, 29 Mar 2010 07:58:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>No usar el metodo IEnumerable.Count de LINQ</title>
		<link>http://gabrielrodriguez.net/no-usar-el-metodo-ienumerable-count-de-linq/</link>
		<comments>http://gabrielrodriguez.net/no-usar-el-metodo-ienumerable-count-de-linq/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 05:49:27 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[LINQ To SQL]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=412</guid>
		<description><![CDATA[Los que usen LINQ, especificamente LINQ to SQL, favor de leer el siguiente articulo:
IEnumerable.Count() is a Code Smell
El articulo explica que es muy comun para cualquier desarrollador utilizar este metodo para hacer validaciones del tipo:
if(products.Count() == 0) ... 
El problema es que el metodo Count() de IEnumerable es un extension method que no va a [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_381" class="wp-caption aligncenter" style="width: 250px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381" title=".NET Logo" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt=".NET Logo" width="240" height="74" /></a><p class="wp-caption-text">.NET Logo</p></div>
<p>Los que usen LINQ,<strong> especificamente LINQ to SQL,</strong> favor de leer el siguiente articulo:</p>
<p><a title="IEnumerable.Count() is a code smell" href="http://rapidapplicationdevelopment.blogspot.com/2009/07/ienumerablecount-is-code-smell.html">IEnumerable.Count() is a Code Smell</a></p>
<p>El articulo explica que es muy comun para cualquier desarrollador utilizar este metodo para hacer validaciones del tipo:</p>
<pre class="brush: csharp;">if(products.Count() == 0) ... </pre>
<p>El problema es que el metodo <strong>Count() de IEnumerable es un extension method que no va a hacer short-circuit al encontrar más de un item </strong>al ser usado en el contexto del ejemplo anterior.</p>
<p>Peor aun, como la ejecución de LINQ To SQL es deferida, los resultados del metodo Count() no se quedan en cache y cualquier nueva llamada a Count() vuelve a iterar todos los elementos de la coleccion. Tomando en cuenta que LINQ To SQL esta accesando una base de datos&#8230;es muy mal performance.</p>
<p>El articulo sugiere <strong>usar como alternativa el metodo .Any()</strong>. que produce un SQL mas optimizado.</p>
<p>Y si se necesita hacer llamadas posteriores al Count() o Any(), <strong>se recomienda eliminar la deferred execution </strong>pasando los resultados del query de LINQ a una Lista, de la siguiente manera:</p>
<p><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2b91af;"> </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
<pre class="brush: csharp;">IList&lt;Product&gt; products = GetProducts().ToList();</pre>
<p></span></p>
<p>Para detalles completos, favor de leer el articulo original, del blog de Lee Richardson, <a title="Rapid Application Development - Lee Richardson" href="http://rapidapplicationdevelopment.blogspot.com/">Rapid Application Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/no-usar-el-metodo-ienumerable-count-de-linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
