title: c# Linq to Objects - FirstOrDefault performance
body: <p>We're trying to optimize some of our methods. We use Redgate's Performance profiler to find some performance leaks.</p>
  
  <p>Our tool uses Linq to objects in several methods. But we have noticed that a <code>FirstOrDefault</code> takes very long on collections with +/- 1000 objects.</p>
  
  <p>The profiler also alerts that the query is very slow. I've added images with the profiler results.</p>
  
  <p>It's not possible to add the collection to a database and then query the database.
  Any recommendations?</p>
  
  <p>Thanks !</p>
  
  <pre><code>private SaldoPrivatiefKlantVerdeelsleutel GetParentSaldoPrivatiefKlantVerdeelsleutel(SaldoPrivatiefKlantVerdeelsleutel saldoPrivatiefKlantVerdeelsleutel, SaldoGebouwRekeningBoeking boeking, int privatiefKlant)
  {
      SaldoPrivatiefKlantVerdeelsleutel parentSaldoPrivatiefKlantVerdeelsleutel = null;
  
      if (saldoPrivatiefKlantVerdeelsleutel != null)
      {
          try
          {
              parentSaldoPrivatiefKlantVerdeelsleutel = saldoPrivatiefKlantVerdeelsleutel.AfrekenPeriode.SaldoPrivatiefKlantVerdeelsleutelCollection
                  .FirstOrDefault(s =&gt; (boeking == null || (s.SaldoVerdeelsleutel != null &amp;&amp;
                  (s.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID == boeking.SaldoGebouwRekeningVerdeling.SaldoGebouwRekening.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID)))
                  &amp;&amp; s.PrivatiefKlant.ID == privatiefKlant);
          }
          catch (Exception ex)
          { }
      }
  
      return parentSaldoPrivatiefKlantVerdeelsleutel;
  }
  </code></pre>
  
  <p>Image :
  <a href="http://s13.postimg.org/z9uoojcxj/LINQ1.png" rel="noreferrer">Profile report</a></p>