Average value for each row
While the logic of this:

for (int i = 0; i &lt; workOrders.Count; i++)
{
    if (workOrders.Count - 1 &gt; i)
        reportObj.Count += workOrders[i].CreatedOn.DiffDays(workOrders[i + 1].CreatedOn);
}
reportObj.Count = reportObj.Count / row.count;


is valid.  I think the for loop might not be necessary.  You should be able to take the difference from the first to last:

reportObj.Count = workOrders[0].CreatedOn.DiffDays(workOrders[workOrders.Count - 1].CreatedOn) / row.count;


In looking at the rest of that method it looks like the LINQ queries can be simplified quite a bit.  Something like this should work:

public List&lt;ReportVM&gt; DelayReasonAverage()
{
    return (from DelayReason dr in _delayReasons
            let row = new
            {
                delayId = dr.Id,
                delayTitle = dr.Title,
                workOrders = dr.WorkOrders.ToList(),
                count = _delayReasons.Count()
            }
            orderby row.count descending
            let reportObj = new ReportVM()
            {
                DelayTitle = row.delayTitle,
                Count = (int)Math.Round(row.workOrders[0].CreatedOn.DiffDays
                (row.workOrders[row.workOrders.Count - 1].CreatedOn) / (double)row.count)
            }
            select reportObj).ToList();
}


I noticed your post has this method as void, but it's creating a list, so I changed the signature to reflect that.  I also changed the way the average is calculated, by using Math.Round to get a more accurate reflection of the actual average.