Counting matching rows in IQueryable
Counters.Total = ticketList.Count();
Counters.Open = ticketList.Count(e =&gt; e.Status == StatusType.Open);
Counters.Responded = ticketList.Count(e =&gt; e.Status == StatusType.Responded);
Counters.Resolved = ticketList.Count(e =&gt; e.Status == StatusType.Resolved);
Counters.Archived = ticketList.Count(e =&gt; e.Status == StatusType.Archived);



You have so many counters there that you should really consider using a GroupBy on the Status column.




// Can't use LINQ-to-SQL here -- Is60To90DaysOld and Is90DaysOld aren't columns in database
List&lt;TicketModel&gt; list = ticketList.ToList();
Counters.Age60To90 = list.Count(e =&gt; e.Is60To90DaysOld);
Counters.Age90Plus = list.Count(e =&gt; e.Is90DaysOld);



This part could also benefit from another GroupBy if you added one more property Age and a helper enum:

public enum Age
{ 
    Unknown,
    Between60And90Days,
    GreaterOrEqual90Days
}


The new property could replace the other two as they are mutually exclusive anyway:

public Age Age
{
    get 
    {
        TimeSpan age = DateTime.Today - DateOfCreation;

        if (age.Days &gt;= 60 &amp;&amp; age.Days &lt; 90) return Age.Between60And90Days;
        if (age.Days &gt;= 90) return Age.GreaterOrEqual90Days;

        return Age.Unknown;
    }
}