title: Linq To Sql Left outer join - filtering null results
body: <p>I'd like to reproduce the following SQL into C# LinqToSql</p>
  
  <pre><code>SELECT TOP(10) Keywords.*
  FROM         Keywords 
  LEFT OUTER JOIN IgnoreWords 
    ON Keywords.WordID = IgnoreWords.ID
  WHERE  (DomainID = 16673) 
    AND (IgnoreWords.Name IS NULL)
  ORDER BY [Score] DESC
  </code></pre>
  
  <p>The following C# Linq gives the right answer.<br>
  But I can't help think I'm missing something (a better way of doing it?)</p>
  
  <pre><code>var query = (from keyword in context.Keywords
       join ignore in context.IgnoreWords 
          on keyword.WordID equals ignore.ID into ignored
       from i in ignored.DefaultIfEmpty()
       where i == null
       where keyword.DomainID == ID
       orderby keyword.Score descending
       select keyword).Take(10);
  </code></pre>
  
  <p>the SQL produced looks something like this:</p>
  
  <pre><code>SELECT TOP (10) 
         [t0].[DomainID]
       , [t0].[WordID]
       , [t0].[Score]
       , [t0].[Count]
    FROM [dbo].[Keywords] AS [t0]
    LEFT OUTER JOIN 
      (  SELECT 1 AS [test]
              , [t1].[ID] 
           FROM [dbo].[IgnoreWords] AS [t1]
      ) AS [t2] 
      ON [t0].[WordID] = [t2].[ID] 
  WHERE ([t0].[DomainID] = 16673) 
    AND ([t2].[test] IS NULL)
  ORDER BY [t0].[Score] DESC
  </code></pre>
  
  <p>How can I get rid of this redundant inner selection?
  It's only slightly more expensive but every bit helps!</p>