Я выясняю, как использовать LINQ, и я начинаю понимать все больше и больше об этом.Однако у меня есть один SQL-запрос, который я не могу понять, как конвертировать в LINQ.
У меня есть таблица базы данных, которая содержит информацию об аренде автомобилей.Из этой таблицы мне нужно запросить топ-10, содержащие владельцев, которые арендовали большинство автомобилей, идентификатор владельца и имя владельца.Запрос SQL выглядит следующим образом:
SELECT TOP 10 owner_name, MAX(calculated_owner_rental_count) as totalRentals, owner_id
FROM[rentals]
WHERE owner_name IS NOT NULL
GROUP BY owner_name, owner_id
ORDER BY totalRentals DESC
Теперь я попытался преобразовать это в LINQ, автоматически заполнить объект и добавить его в список.Моя попытка до сих пор:
private List<TopOwner> GetTopOwners() {
return Rentals
.Select(x => new TopOwner { OwnerName = x.OwnerName, CalculatedOwnerRentalCount = Rentals.Max(x => x.CalculatedOwnerRentalCount), OwnerId = x.OwnerId })
.Where(x => x.OwnerName != null)
.OrderByDescending(x => x.CalculatedOwnerRentalCount)
.GroupBy(x => new { x.OwnerName, x.OwnerId })
.Take(10)
.ToList();
}
Однако ниже строки CalculatedOwnerRentalCount = Rentals.Max(x => x.CalculatedOwnerRentalCount)
я получаю ошибку Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)
, которая заставляет меня поверить, что с моим запросом LINQ что-то не так.
Класс модели TopOwner выглядит следующим образом:
public class TopOwner {
public string OwnerName;
public int CalculatedOwnerRentalCount;
public int OwnerId;
}
Может кто-нибудь определить, что я делаю неправильно с моим запросом LINQ?Это будет высоко ценится.