Как правильно использовать .Distinct()

В моей бд есть таблицы с животными, работниками и содержанием животных. Написал рабочий запрос sql, который выводит вид животных, с которыми работают больше всего сотрудников. В данном случаее три млекопитающих с которыми работает один и тот же сотрудник, и две птицы с которыми работают два разных сотрудника(запрос выводит птиц).

SELECT TOP(1) Species as MaxGroup,  Count(DISTINCT Employees_Id)  as QuantityOfEmployees
FROM 
Animal1 INNER JOIN Maintenance
ON Animal1.Id = Maintenance.Animal_Id
GROUP BY Species
ORDER BY QuantityOfEmployees DESC

Я попробовал написать аналогичный запрос используя LINQ, но .Distinct() вызывает исключение. Без него работает, но поскольку считаются не только уникальные работники, запрос выводит млекопитающих. Замена QuantityOfEmployees = g.Distinct().Count(p => p.Maintenance.EmployeesId != null) на QuantityOfEmployees = g.Select(p => p.Maintenance.EmployeesId != null).Distinct().Count()не помогает.

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace lab3
{
    class Program
    {
        static void Main(string[] args)
        {
            using (tryContext db = new tryContext())
            {
                var a =
                (from Maintenance in db.Maintenances
                 group new { Maintenance.Animal, Maintenance } by new
                 {
                     Maintenance.Animal.Species
                 } into g
                 orderby
                   g.Count(p => p.Maintenance.EmployeesId != null) descending
                 select new
                 {
                     MaxGroup = g.Key.Species,
                     QuantityOfEmployees = g.Distinct().Count(p => p.Maintenance.EmployeesId != null)
                 }
                 ).Take(1);
                foreach (var o in a)
                {
                    Console.WriteLine($"{o.MaxGroup} ");
                }
            }
            Console.ReadKey();
        }
    }
    
} 

Ответы (1 шт):

Автор решения: Svyatoslav Danyliv

Начиная с EF Core 5, g.Select(field).Distinct().Count() будет транслироваться в COUNT(DISTINCT field)

var query =
    from Maintenance in db.Maintenances
    group Maintenance by Maintenance.Animal.Species into g
    select new
    {
        MaxGroup = g.Key,
        QuantityOfEmployees = g.Select(p => p.EmployeesId).Distinct().Count()
    }

query = query
    .OrderBy(x = x.QuantityOfEmployees)
    .Take(1);
→ Ссылка