如何通过LINQ将用Max 组转换为SQL



我正在弄清楚如何使用linq,并且我开始越来越了解它。但是,我有一个SQL查询,我无法弄清楚如何转换为Linq。

我有一个数据库表,其中包含有关汽车租赁的信息。在此表中,我需要查询包含租用最多汽车的所有者,所有者的ID和所有者名称的所有者。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查询中做错了什么?将不胜感激。

显然,您正在尝试在 int?列表中 Max(nullable ints(。
而且您是输出类TopOwnerCalculatedOwnerRentalCount是类型int
因此,您有一个铸造问题 - 从int?int,正如编译器暗示您的那样。

相关内容

  • 没有找到相关文章

最新更新