Entity Framework Core 5 使用SQL查询并聚合结果转换为指定DTO
使用 Entity Framework Core 5,可以使用以下步骤将 SQL 查询结果转换为指定的 DTO 并返回:
- 创建一个 DTO 类来存储查询结果。例如,如果查询返回的是订单总数和平均订单金额,则可以创建一个名为 'OrderSummaryDTO' 的类:
public class OrderSummaryDTO
{
public int TotalOrders { get; set; }
public decimal AverageOrderAmount { get; set; }
}
- 在 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();
}
- 调用 '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' 列表。
原文地址: https://www.cveoy.top/t/topic/j0PL 著作权归作者所有。请勿转载和采集!