以下是一个可能的实现:

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

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的所有订单的状态计数

写一个ASPNET Core API用ef core统计数据库中指定userid各状态订单数量

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

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