【问题标题】:How to convert SQL with MAX + GROUP BY into LINQ?如何将带有 MAX + GROUP BY 的 SQL 转换为 LINQ?
【发布时间】:2019-10-11 18:09:28
【问题描述】:

我正在研究如何使用 LINQ,并且我开始越来越了解它。但是我有一个 SQL 查询,我不知道如何转换为 LINQ。

我有一个包含汽车租赁信息的数据库表。从这个表中,我需要查询前 10 名,其中包含租车最多的车主、车主 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 =&gt; 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 查询时做错了什么?将不胜感激。

【问题讨论】:

  • x.CalculatedOwnerRentalCount.GetValueOrDefault() 以便使用0 而不是NULL
  • 也许我的SQL to LINQ Recipe 对你有帮助?

标签: c# linq sql-to-linq-conversion


【解决方案1】:

显然,您正在尝试在 int?(可空整数)的列表中添加 Max
而你的输出类 TopOwnerCalculatedOwnerRentalCountint 类型。
所以,你有一个转换问题 - 从 int?int,编译器会提示你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2020-08-12
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多