I think you're trying to resolve your issue by complicating it too much... ;) Note, that Count can accept condition to get interesting data (which works like Where). See: [Enumerable.Count Method (System.Linq) | Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.count?view=netcore-3.1#System\_Linq\_Enumerable\_Count\_\_1\_System\_Collections\_Generic\_IEnumerable\_\_\_0\_\_) So...
var finalTotal = from t1 in _context.Apiapplicant
join t2 in _context.ApiApplicantHistory on t1.Id equals t2.ApiApplicantId
join t3 in _context.EntityType on t2.LastReqStatus equals t3.Id
where t1.IsDeleted == false && t2.Date != null && t1.ApiRequestNo != null
group t1
by new
{
lastReq = t2.LastReqStatus,
Year = t2.Date.Substring(0, 4),
Month = t2.Date.Substring(5, 2)
} into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
lastReq = g.Key.lastReq,
Granted = g.Count(x=>x.t2.Name == "granted"),
Other = g.Count(x=>x.t2.Name != "granted"),
TotalCount = g.Count()
};