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

多选列表匹配数据库数据:WorkflowStatus枚举查询报错修复

解决多选状态匹配的查询条件错误问题

我一眼就看出问题所在了:你的c.RequestIdStatus是单个WorkflowStatus枚举值,而Report.RequestIdStatus是一个List<WorkflowStatus>集合,直接用==比较当然会报错——这就像拿一个苹果和一筐苹果比相等,编译器肯定懵了。

要解决这个问题,我们需要用集合的Contains方法,检查当前请求的状态是否在用户选中的状态列表里。另外还要考虑一种情况:如果用户没选任何状态,是不是应该返回所有数据?我们可以加个判断来处理这种场景。

修正后的Controller代码如下:

public ActionResult GeneratingReports(ReportViewModel Report) {
    var requestQuery = _requestServices.GetRequetsForReport().AsQueryable();

    // 处理多选状态过滤:如果选中了状态,就过滤出包含这些状态的数据
    if (Report.RequestIdStatus != null && Report.RequestIdStatus.Any())
    {
        requestQuery = requestQuery.Where(c => Report.RequestIdStatus.Contains(c.RequestIdStatus));
    }

    var RequestReport = requestQuery.Select(c => new ReportViewModel {
        RequestCode = c.RequestCode.ToString(),
        RequestDate = DateHelper.ConvertGregorianToUmAlQura(c.RequestDate, "dd / MM / yyyy"),
        ComplaintIdType = AppCache.ComplaintTypeName(c.ComplaintIdType),
        ComplaintAgainstIdType = AppCache.ComplaintAgainstTypeName(c.ComplaintAgainstIdType),
        RequestStatus = AppCache.RequestStatusName(c.RequestIdStatus),
        RequestResult = AppCache.RequestRName(c.RequestIdResult),
        AgencyDocumentationEmployeeId = _requestServices.GetUserFullNameById(c.AgencyDocumentationEmployeeId)
    }).ToList();

    string ReportJson = JsonConvert.SerializeObject(RequestReport);
    return Content(ReportJson);
}

关键修改点:

  • 把初始查询转为IQueryable,这样过滤条件可以延迟执行,提升性能
  • 增加空值和空列表判断,避免用户没选状态时出现异常
  • 将Where条件改为Report.RequestIdStatus.Contains(c.RequestIdStatus),判断当前请求的状态是否在选中的列表中

这样修改后,当用户选中[1,2,3](对应New、JusticeWritingUnderProccessing、JusticeWritingReply)时,就能正确筛选出所有状态属于这三个值的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:02:39