title: Is there a good LINQ way to do a cartesian product?
body: <p>I have a class structure like so:</p>
  
  <pre><code>Person
  Dogs (dog 1, dog 2, etc)
  Puppies (puppy A, puppy B, etc)
  </code></pre>
  
  <p>There is one person. He has 1..n dogs. Each dog has 1..n puppies.</p>
  
  <p>I want a list of all the possible combination of puppies, taking 1 puppy from each dog. Eg:</p>
  
  <p>dog 1 puppy A, dog 2 puppy A
  dog 1 puppy A, dog 2 puppy B
  dog 1 puppy B, dog 2 puppy A
  dog 1 puppy B, dog 2 puppy B</p>
  
  <p>If it was in sql tables, i'd do something like the following to 'multiply' the tables:</p>
  
  <pre><code>select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'
  </code></pre>
  
  <p>Is there some linq-ish way to do this kinda thing???</p>
  
  <p>Thanks so much</p>