使用 Entity Framework Core 5,可以使用以下步骤将 SQL 查询结果转换为指定的 DTO 并返回:

  1. 创建一个 DTO 类来存储查询结果。例如,如果查询返回的是订单总数和平均订单金额,则可以创建一个名为 'OrderSummaryDTO' 的类:
public class OrderSummaryDTO
{
    public int TotalOrders { get; set; }
    public decimal AverageOrderAmount { get; set; }
}
  1. 在 DbContext 类中创建一个方法来执行 SQL 查询并将结果转换为 DTO。例如,如果查询返回的是订单总数和平均订单金额,则可以创建一个名为 'GetOrderSummary' 方法:
public async Task<OrderSummaryDTO> GetOrderSummary()
{
    var sql = "SELECT COUNT(*) AS TotalOrders, AVG(OrderAmount) AS AverageOrderAmount FROM Orders";
    var result = await this.Database.ExecuteSqlRawAsync<OrderSummaryDTO>(sql);
    return result.FirstOrDefault();
}
  1. 调用 'GetOrderSummary' 方法来获取查询结果并将其转换为 DTO:
var orderSummary = await dbContext.GetOrderSummary();

注意,此方法使用 'ExecuteSqlRawAsync' 方法来执行 SQL 查询并返回结果。该方法接受一个泛型参数,该参数指定查询结果应转换为的 DTO 类型。

在上面的示例中,我们使用 'FirstOrDefault' 方法来获取查询结果中的第一行数据。由于查询返回的是一个聚合结果,因此只有一行数据。

如果查询返回多行数据,则可以使用 'ToList' 方法来获取所有行数据并将其转换为 DTO 列表:

public async Task<List<OrderSummaryDTO>> GetOrderSummary()
{
    var sql = "SELECT OrderDate, COUNT(*) AS TotalOrders, AVG(OrderAmount) AS AverageOrderAmount FROM Orders GROUP BY OrderDate";
    var result = await this.Database.ExecuteSqlRawAsync<OrderSummaryDTO>(sql);
    return result.ToList();
}

在上面的示例中,我们使用 'GROUP BY' 子句将查询结果按订单日期分组,并返回每个日期的订单总数和平均订单金额。'ToList' 方法将查询结果转换为 'OrderSummaryDTO' 列表。

Entity Framework Core 5 使用SQL查询并聚合结果转换为指定DTO

原文地址: https://www.cveoy.top/t/topic/j0PL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录