You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core API中EF Core查询返回类型不匹配及多结果过滤问题

问题解决:ASP.NET Core控制器返回过滤后的集合数据

错误原因

你的第二个Get方法声明返回单个wareh_KPI_IN实体,但Where方法执行后返回的是符合条件的实体集合(类型为IQueryable<wareh_KPI_IN>,实现了IEnumerable<wareh_KPI_IN>),两者类型不匹配,因此触发编译错误。添加FirstOrDefault()会仅返回第一个匹配项,不符合你获取所有符合条件数据的需求。

修正方案

只需将第二个Get方法的返回类型改为集合类型,并保持查询逻辑即可。同时推荐使用异步方法提升Web应用性能,以下是两种实现方式:

1. 同步版本

using ESM_DASHBOARD.Data;
using ESM_DASHBOARD.Data.Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace ESM_DASHBOARD.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class wareh_KPI_INController : ControllerBase
    {
        private readonly EsmDashboardContext _esmDashboardContext;
        public wareh_KPI_INController(EsmDashboardContext esmDashboardContext)
        {
            _esmDashboardContext = esmDashboardContext;
        }

        [HttpGet]
        public IEnumerable<wareh_KPI_IN> Get()
        {
            return _esmDashboardContext.wareh_KPI_IN;
        }

        // 修改返回类型为集合,并调整参数命名符合C#规范
        [HttpGet("{weekNb}")]
        public IEnumerable<wareh_KPI_IN> Get(int weekNb)
        {
            return _esmDashboardContext.wareh_KPI_IN.Where(s => s.Week_nb == weekNb);
        }
    }
}

2. 推荐异步版本(ASP.NET Core异步优先)

using ESM_DASHBOARD.Data;
using ESM_DASHBOARD.Data.Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;

namespace ESM_DASHBOARD.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class wareh_KPI_INController : ControllerBase
    {
        private readonly EsmDashboardContext _esmDashboardContext;
        public wareh_KPI_INController(EsmDashboardContext esmDashboardContext)
        {
            _esmDashboardContext = esmDashboardContext;
        }

        [HttpGet]
        public async Task<IEnumerable<wareh_KPI_IN>> Get()
        {
            return await _esmDashboardContext.wareh_KPI_IN.ToListAsync();
        }

        [HttpGet("{weekNb}")]
        public async Task<IEnumerable<wareh_KPI_IN>> Get(int weekNb)
        {
            // 使用ToListAsync()将数据加载到内存,避免延迟执行可能引发的上下文释放问题
            return await _esmDashboardContext.wareh_KPI_IN.Where(s => s.Week_nb == weekNb).ToListAsync();
        }
    }
}

额外注意事项

  • 参数命名建议遵循C#小驼峰规范(如weekNb替代Week_nb),提升代码可读性
  • 异步方法中使用ToListAsync()而非直接返回IQueryable,可以避免后续操作时上下文已被释放的问题,同时确保数据立即加载到内存
  • 实体类和控制器名建议遵循帕斯卡命名法(如WarehKpiIn替代wareh_KPI_IN),符合.NET生态的编码规范

内容的提问来源于stack exchange,提问作者Red bad coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:50:26