Как конвертировать SQL с MAX + GROUP BY в LINQ? - PullRequest
0 голосов
/ 25 мая 2019

Я выясняю, как использовать 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?Это будет высоко ценится.

1 Ответ

0 голосов
/ 26 мая 2019

По-видимому, вы пытаетесь Max в списке int? (Nullable Ints).
И вы выводите класс TopOwner CalculatedOwnerRentalCount типа int.
Итак, у вас есть проблема с приведением - от int? до int, как подсказывает вам компилятор.

...