Question: I'm trying to find missing dates between two DateTime variables for a collection of DateTimes.

For example.

```
Collection
2010-01-01
2010-01-02
2010-01-03
2010-01-05

DateRange
2010-01-01 -> 2010-01-06

```

would give me a `List<DateTime>` of

```
2010-01-04
2010-01-06

```

I can think of a few was of implementing this but nothing clean and simple

Any ideas?

Answer: 
Depending on exactly what you are looking for and the sizes of the sets of data. A simple way would be to load the dates into a collection, then use a simple loop. I'll add a code sample here in a second.

```
DateTime currentDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2010, 1, 6);
List<DateTime> existingDates = new List<DateTime>; //You fill with values
List<DateTime> missingDates = new List<DateTime>;

while(currentDate <= endDate)
{
    if(existingDates.contains(currentDate))
        missingDates.Add(currentDate);

    //Increment date
    currentDate = currentDate.AddDays(1);
}

```

Using this example you just need to load "existingDates" with the proper values, then the "missingDates" list will have your results
```
var dates = new List<DateTime>
                {
                    new DateTime( 2010, 01, 01 ), 
                    new DateTime( 2010, 01, 02 ), 
                    new DateTime( 2010, 01, 03 ), 
                    new DateTime( 2010, 01, 05 )
                };

var targetDate = new DateTime( 2010, 01, 01 );

var missingDates = new List<DateTime>();
while ( targetDate <= new DateTime( 2010, 01, 06 ) )
{
    if ( !dates.Contains( targetDate ) )
        missingDates.Add( targetDate );

    targetDate = targetDate.AddDays( 1 );
}

foreach ( var date in missingDates )
    Debug.WriteLine( date.ToString() );

```

If you were thinking of solving this is LINQ, I do not believe it is possible unless you also had a list of all dates between the min and max date. In SQL, this amounts to a calendar table that contains all dates across a given time period.

Here is a LINQ solution where I create the Calendar list I mentioned above and then query for missing dates:

```
var dates = new List<DateTime>
                {
                    new DateTime( 2010, 01, 01 ), 
                    new DateTime( 2010, 01, 02 ), 
                    new DateTime( 2010, 01, 03 ), 
                    new DateTime( 2010, 01, 05 )
                };
var calendar = new List<DateTime>();
var targetDate = new DateTime( 2010, 01, 01 );
while ( targetDate <= new DateTime( 2010, 01, 06 ) )
{
    calendar.Add( targetDate );
    targetDate = targetDate.AddDays( 1 );
}

var missingDates = ( from date in calendar
              where !dates.Contains( date )
              select date ).ToList();

foreach ( var date in missingDates )
    Debug.WriteLine( date.ToString() );

```