以下是一个可能的实现:

首先,我们需要定义一个数据模型来表示订单:

public class Order
{
    public int Id { get; set; } 
    public int UserId { get; set; } 
    public string Status { get; set; } 
}

然后我们需要定义一个 DbContext 来访问数据库:

public class MyDbContext : DbContext
{
    public DbSet<Order> Orders { get; set; } 

    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }
}

接下来,我们可以定义一个 Controller 来提供 API:

[ApiController]
[Route("[controller]")]
public class OrderController : ControllerBase
{
    private readonly MyDbContext _dbContext; 

    public OrderController(MyDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    [HttpGet]
    public IActionResult Get(int userId)
    {
        var result = _dbContext.Orders
            .Where(o => o.UserId == userId)
            .GroupBy(o => o.Status)
            .Select(g => new
            {
                Status = g.Key,
                Count = g.Count()
            })
            .ToList();

        return Ok(result);
    }
}

在 Get 方法中,我们首先选择所有属于指定 userId 的订单,然后按状态分组,最后选择每个状态的订单数量。我们将结果转换为一个匿名类型列表并返回。

最后,我们需要在 Startup.cs 中注册 DbContext 和 Controller:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("MyDb")));

    services.AddControllers();
}

这样,我们的 API 就完成了。当我们向 /order?userId=1 发送 GET 请求时,将返回属于用户 1 的所有订单的状态计数。

ASP.NET Core API 使用 EF Core 统计指定用户订单状态数量

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

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