<?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>LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx</link><description>This is the seventh in a series of posts on how to build a LINQ IQueryable provider. If you have not read the previous posts you might want to rethink your place in the universe. :-)</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4751968</link><pubDate>Wed, 05 Sep 2007 03:48:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4751968</guid><dc:creator>Noticias externas</dc:creator><description>&lt;p&gt;This is the seventh in a series of posts on how to build a LINQ IQueryable provider. If you have not&lt;/p&gt;
</description></item><item><title>LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4752453</link><pubDate>Wed, 05 Sep 2007 04:34:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4752453</guid><dc:creator>Roller</dc:creator><description>&lt;p&gt;This is the seventh in a series of posts on how to build a LINQ IQueryable provider. If you have not&lt;/p&gt;
</description></item><item><title>re: LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4757748</link><pubDate>Wed, 05 Sep 2007 10:54:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4757748</guid><dc:creator>Frans Bouma</dc:creator><description>&lt;p&gt;And now if the target db doesn't support 'cross apply' ? Is it then even possible to produce valid SQL, or better: is it possible to interpret the expression tree in all cases with 2 or more froms so valid SQL is produced for that DB?&lt;/p&gt;
&lt;p&gt;I also fail to see why there's no left/right keyword. I mean: (think northwind), what if I want all employees who haven't filed any orders yet. This is a simple left join with a NULL test predicate in the where, however hard to formulate in Linq. I really wonder why it's so hard to formulate, I don't really see a reason to make it this complicated simply because it's a well known query construct in SQL and Linq is a new language. Not designing it in (but via a workaround with DefaultIfEmpty() which leads to painful interpretation routines in the linq provider) is IMHO a flaw.&lt;/p&gt;</description></item><item><title>re: LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4764967</link><pubDate>Wed, 05 Sep 2007 17:22:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4764967</guid><dc:creator>mattwar</dc:creator><description>&lt;P&gt;Frans, in most cases it is possible to convert a cross apply into a cross join, but the transformation is very involved and so not something I would dive into at this point in the series (I don't have enough support built up in my tree manipulating toolbox yet.)&lt;/P&gt;
&lt;P&gt;There are a few cases where the cross apply cannot be converted. For example,&amp;nbsp;use of TOP or aggregates on the right-hand side whose scoping depends on the left-hand side variable.&lt;/P&gt;</description></item><item><title>re: LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4766067</link><pubDate>Wed, 05 Sep 2007 19:33:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4766067</guid><dc:creator>Frans Bouma</dc:creator><description>&lt;p&gt;Ok, so this will be a real challenge for providers which support other databases than just sqlserver? &lt;/p&gt;
&lt;p&gt;Also how to perform the left join filter example I posted?&lt;/p&gt;
&lt;p&gt;Say I want all customers who don't have an order (in my northwind db, that's 2). if I do:&lt;/p&gt;
&lt;p&gt;var q = from c in nw.Customers&lt;/p&gt;
&lt;p&gt;		join o in nw.Orders on c.CustomerID equals o.CustomerID into co&lt;/p&gt;
&lt;p&gt;		from o in co.DefaultIfEmpty()&lt;/p&gt;
&lt;p&gt;		where o != null&lt;/p&gt;
&lt;p&gt;		select c;&lt;/p&gt;
&lt;p&gt;I don't get the right results. (all order rows joined with the customers) But all examples I see on the net about left joins are about fetching customer data AND order data, but I'm only interested in customer data which doesn't have order data. No matter how long I stare at this, I can't find a way to get the query I want. &lt;/p&gt;
&lt;p&gt;It's not that I'm looking for corner cases in where Linq fails, (not linq to sql, but the language Linq), I'm looking for ways how normal constructs are done in Linq and if these aren't possible, why they aren't possible, or done in a cumbersome way (like the long complex route with cross apply, which is likely not supported in a large range of databases other than sqlserver).&lt;/p&gt;</description></item><item><title>re: LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4766080</link><pubDate>Wed, 05 Sep 2007 19:36:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4766080</guid><dc:creator>Frans Bouma</dc:creator><description>&lt;p&gt;Never mind my previous post. This query works:&lt;/p&gt;
&lt;p&gt;var q = from c in nw.Customers&lt;/p&gt;
&lt;p&gt;		join o in nw.Orders on c.CustomerID equals o.CustomerID into co&lt;/p&gt;
&lt;p&gt;		from o in co.DefaultIfEmpty()&lt;/p&gt;
&lt;p&gt;		where o == null&lt;/p&gt;
&lt;p&gt;		select c;&lt;/p&gt;
&lt;p&gt;which gives an odd query with a 'test' field. This query:&lt;/p&gt;
&lt;p&gt;var q = from c in nw.Customers&lt;/p&gt;
&lt;p&gt;		join o in nw.Orders on c.CustomerID equals o.CustomerID into co&lt;/p&gt;
&lt;p&gt;		from o in co.DefaultIfEmpty()&lt;/p&gt;
&lt;p&gt;		where o.OrderID == null&lt;/p&gt;
&lt;p&gt;		select c;&lt;/p&gt;
&lt;p&gt;gives a more natural query. &lt;/p&gt;</description></item><item><title>re: LINQ: Building an IQueryable provider - Part VII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#4818862</link><pubDate>Sat, 08 Sep 2007 03:20:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4818862</guid><dc:creator>rogerj</dc:creator><description>&lt;p&gt;Pingback from &lt;a rel="nofollow" target="_new" href="http://oakleafblog.blogspot.com/2007/09/linq-and-entity-framework-updates-for.html"&gt;http://oakleafblog.blogspot.com/2007/09/linq-and-entity-framework-updates-for.html&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Community Convergence XXXI</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#5132081</link><pubDate>Wed, 26 Sep 2007 03:38:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5132081</guid><dc:creator>Charlie Calvert's Community Blog</dc:creator><description>&lt;p&gt;Welcome to the thirty-first edition of Community Convergence. This issue features links to seven very&lt;/p&gt;</description></item><item><title>Community Convergence XXXI</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#5132165</link><pubDate>Wed, 26 Sep 2007 03:43:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5132165</guid><dc:creator>Charlie Calvert's Community Blog</dc:creator><description>&lt;p&gt;Welcome to the thirty-first edition of Community Convergence. This issue features links to seven very&lt;/p&gt;</description></item><item><title>LINQ: Building an IQueryable Provider - Part VIII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#5386195</link><pubDate>Wed, 10 Oct 2007 00:49:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5386195</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the eighth in a series of posts on how to build a LINQ IQueryable provider. If you have not read&lt;/p&gt;</description></item><item><title>LINQ: Building an IQueryable Provider - Part VIII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#5386219</link><pubDate>Wed, 10 Oct 2007 00:55:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5386219</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;Implementing OrderBy Today's topic is translating those order-by clauses. Fortunately, there is only one way to do ordering, and that's using the LINQ ordering specific query operators. The bad news is that there are four different operators.&lt;/p&gt;
</description></item><item><title>TerraServer Sample: A LINQ Provider</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7011288</link><pubDate>Mon, 07 Jan 2008 04:34:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7011288</guid><dc:creator>Charlie Calvert's Community Blog</dc:creator><description>&lt;p&gt;Over the holidays Alex Turner, Mary Deyo and I added a new sample to the downloadable version of the&lt;/p&gt;</description></item><item><title>TerraServer Sample: A LINQ Provider</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7011312</link><pubDate>Mon, 07 Jan 2008 04:37:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7011312</guid><dc:creator>Charlie Calvert's Community Blog</dc:creator><description>&lt;p&gt;Over the holidays Alex Turner, Mary Deyo and I added a new sample to the downloadable version of the&lt;/p&gt;</description></item><item><title>LINQ: Building an IQueryable Provider - Part IX</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7138559</link><pubDate>Thu, 17 Jan 2008 06:06:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7138559</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the nineth in a series of posts on how to build a LINQ IQueryable provider. If you have not read&lt;/p&gt;</description></item><item><title>LINQ: Building an IQueryable Provider - Part IX</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7138577</link><pubDate>Thu, 17 Jan 2008 06:08:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7138577</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the nineth in a series of posts on how to build a LINQ IQueryable provider. If you have not read&lt;/p&gt;
</description></item><item><title>LINQ Tips: Implementing IQueryable Provider</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7506810</link><pubDate>Thu, 07 Feb 2008 08:49:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7506810</guid><dc:creator>Shahed Khan (MVP C#)</dc:creator><description>&lt;p&gt;Check out the following from Matt Warrens blog posts, if you are interested on how to implement IQueryable...&lt;/p&gt;</description></item><item><title>LINQ Tips: Implementing IQueryable Provider</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#7506827</link><pubDate>Thu, 07 Feb 2008 08:49:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7506827</guid><dc:creator>Shahed Khan (MVP C#)</dc:creator><description>&lt;p&gt;Check out the following from Matt Warrens blog posts, if you are interested on how to implement IQueryable&lt;/p&gt;</description></item><item><title>LINQ: Building an IQueryable Provider - Part X</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#8710291</link><pubDate>Wed, 09 Jul 2008 02:29:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8710291</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the tenth in a series of posts on how to build a LINQ IQueryable provider. If you have not read the previous posts you'll want to find a nice shady tree, relax and meditate on why your world is so confused and full of meaningless tasks that it&lt;/p&gt;
</description></item><item><title>LINQ: Building an IQueryable Provider - Part XI</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#8732027</link><pubDate>Mon, 14 Jul 2008 22:32:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8732027</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the eleventh in a series of posts on how to build a LINQ IQueryable provider. If you have not read the previous posts you’ll want to do so before proceeding, or at least before proceeding to copy the code into your own project and telling your&lt;/p&gt;
</description></item><item><title>Building a LINQ IQueryable Provider - Part XII</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#9114760</link><pubDate>Tue, 18 Nov 2008 04:04:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9114760</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;This is the twelfth in a series of posts on how to build a LINQ IQueryable provider. If you have not&lt;/p&gt;
</description></item><item><title>LINQ links</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#9119367</link><pubDate>Tue, 18 Nov 2008 20:26:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9119367</guid><dc:creator>The Wayward WebLog</dc:creator><description>&lt;p&gt;Part I - Reusable IQueryable base classes Part II - Where and reusable Expression tree visitor Part II&lt;/p&gt;
</description></item><item><title>LINQ: Building an IQueryable provider series</title><link>http://blogs.msdn.com/mattwar/archive/2007/09/04/linq-building-an-iqueryable-provider-part-vii.aspx#9490102</link><pubDate>Thu, 19 Mar 2009 17:51:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490102</guid><dc:creator>Floating Heart</dc:creator><description>&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://blogs.msdn.com/mattwar/pages/linq-links.aspx"&gt;http://blogs.msdn.com/mattwar/pages/linq-links.aspx&lt;/a&gt; Here&amp;amp;#39;s a list of all the posts in the building&lt;/p&gt;
</description></item></channel></rss>