title: Intersection of multiple lists with IEnumerable.Intersect()
body: <p>I have a list of lists which I want to find the intersection for like this:</p>
  
  <pre><code>var list1 = new List&lt;int&gt;() { 1, 2, 3 };
  var list2 = new List&lt;int&gt;() { 2, 3, 4 };
  var list3 = new List&lt;int&gt;() { 3, 4, 5 };
  var listOfLists = new List&lt;List&lt;int&gt;&gt;() { list1, list2, list3 };
  
  // expected intersection is List&lt;int&gt;() { 3 };
  </code></pre>
  
  <p>Is there some way to do this with IEnumerable.Intersect()?</p>
  
  <p>EDIT:
  I should have been more clear on this: I really have a list of lists, I don't know how many there will be, the three lists above was just an example, what I have is actually an <code>IEnumerable&lt;IEnumerable&lt;SomeClass&gt;&gt;</code></p>
  
  <h2>SOLUTION</h2>
  
  <p>Thanks for all great answers. It turned out there were four options for solving this: <strong>List+aggregate</strong> (@Marcel Gosselin), <strong>List+foreach</strong> (@JaredPar, @Gabe Moothart), <strong>HashSet+aggregate</strong> (@jesperll) and <strong>HashSet+foreach</strong> (@Tony the Pony). I did some performance testing on these solutions (varying <strong>number of lists</strong>, <strong>number of elements</strong> in each list and <strong>random number max</strong> size.</p>
  
  <p>It turns out that for most situations the HashSet performs better than the List (except with large lists and small random number size, because of the nature of HashSet I guess.)
  I couldn't find any real difference between the foreach method and the aggregate method (the foreach method performs <em>slightly</em> better.)</p>
  
  <p>To me, the aggregate method is really appealing (and I'm going with that as the accepted answer) but I wouldn't say it's the most readable solution.. Thanks again all!</p>