title: Complex LINQ to SQL Query with dates
body: <p>I'm building a query with LINQ to SQL in my C# project, but I have some problems with it...</p>
  
  <p>What I want to do, is select the 4 lasts days that are like today (For example, a Friday), so if we're on Friday 28, I want to query for: Friday 21, 14, 7... The last four Fridays but NOT today.</p>
  
  <p>This is easy, I've done that but here's the complex part, I want to <strong>not</strong> query the exceptions I set, for example End of month, which are from 28th to 1st day of each month, so let's say i want to query this (october, fridays):</p>
  
  <p>Today is Friday 26, I want to query:</p>
  
  <p>19, 12, 5 and September 28th (the fourth friday from now), but as I said, 28th is end of month, so i need to return September 21th which is the last friday and it is not end of month... I have the same issues with holidays, but I think if I can handle end of months, I can do with them...</p>
  
  <p>i hope I've explained good for you to understand what I want... Here's my query, which is working but can't handle exceptions. (the field b.day is the Id for each days, 8 means end of month, and 7 holiday)</p>
  
  <pre><code>var values =
      from b in dc.MyTable
      where // This means end of month
      b.day != 8
  
      // This triggers to query last 4 days
      &amp;&amp; b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-28)
      || b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-21)
      || b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-14)
      || b.date == Convert.ToDateTime(last.ToString("dd/MM/yyy")).AddDays(-7)
      orderby b.id descending
      group b.valor by b.hora_id into hg
      orderby hg.Key descending
  
      select new
      {
          Key = hg.Key,
          Max avg = System.Convert.ToInt32(hg.Average() + ((hg.Average() * intOkMas) / 100)),
          Min avg = System.Convert.ToInt32(hg.Average() - ((hg.Average() * intOkMenos) / 100))
      };
  </code></pre>