Collection base on year
There is no need for this 

DateTime aDate = DateTime.Now;

int currentYearMeetingCount = Meeting.Where(x =&gt; x.Year == aDate.Year).Count();

if (currentYearMeetingCount == 0)
{
    aDate = DateTime.Now.AddYears(-1);

}


if the collection has no data for the current year, it'll only get the past 3 years if any.  so, you can do this directly : 

var totalYearCount = 3;
var maxYear = DateTime.Now.Year;
var minYear = maxYear - totalYearCount;

var result = Meeting.Where(x=&gt; x.Year &gt;= minYear &amp;&amp; x.Year &lt;= maxYear).ToList();

if(result.Count == 0) 
{
    // no data, do something 
}

foreach(var meeting in result)
{
    Console.WriteLine($"{meeting.Name}-{meeting.Year}");
}


this will output 2017-2019 records. However, if your logic has a special case, let's say if there is no records for current year, then start with the last year instead so the output will be from 2016 to 2019. If this is the case, then instead of depending on DateTime.Now.Year you can get the max year from the collection, and subtract the past x years from it. Something like this : 

var totalYearCount = 3;
var maxYear = Meeting.Max(x=&gt; x.Year);
var minYear = maxYear - totalYearCount;
var result = Meeting.Where(x=&gt; x.Year &gt;= minYear &amp;&amp; x.Year &lt;= maxYear).ToList();

if(result.Count == 0) 
{
    // no data, do something 
}

foreach(var meeting in result)
{
    Console.WriteLine($"{meeting.Name}-{meeting.Year}");
}


this will output 2016-2019 records, and if there is any records for the current year (say 2020), then it'll output 2017-2020.