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

ASP.NET Core 6 Web API过滤搜索异常:仅返回单个对象而非目标列表

问题排查与修复方案

核心问题分析

  1. int类型判断逻辑错误
    Argument类的TestId和ExamId是int值类型,默认值为0,string.IsNullOrEmpty(arg.TestId.ToString())永远返回false——int转换为字符串不会是空或空串。这导致筛选条件强制要求匹配TestId和ExamId,直接过滤掉了本该符合条件的数据。

  2. 代码笔误
    查询语句中x.isExamIdNull.Equals(arg.isExamIdNull)是完全错误的写法,误用了逻辑判断变量名,正确写法应该是匹配实体的ExamId属性与参数的ExamId值。


修正后的服务层方法

public IQueryable<Result> GetSByArg(Argument arg)
{
    // 用int默认值0判断是否传入有效筛选值(若业务中0是合法ID,建议改用可空类型)
    var isTestIdNotSpecified = arg.TestId == 0;
    var isExamIdNotSpecified = arg.ExamId == 0;

    var fetch = from x in _dbContext.Repo
                where (isTestIdNotSpecified || x.TestId == arg.TestId)
                      && (isExamIdNotSpecified || x.ExamId == arg.ExamId)
                select x;

    return fetch;
}

业务场景优化建议

如果业务中0是TestId或ExamId的合法值,建议将参数类改为可空int类型,避免误判未传入的筛选条件:

public class Argument
{
    public int? TestId { get; set; }
    public int? ExamId { get; set; }
}

对应的服务层判断逻辑调整为:

public IQueryable<Result> GetSByArg(Argument arg)
{
    var isTestIdNotSpecified = !arg.TestId.HasValue;
    var isExamIdNotSpecified = !arg.ExamId.HasValue;

    var fetch = from x in _dbContext.Repo
                where (isTestIdNotSpecified || x.TestId == arg.TestId.Value)
                      && (isExamIdNotSpecified || x.ExamId == arg.ExamId.Value)
                select x;

    return fetch;
}

内容的提问来源于stack exchange,提问作者Mira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:18:16