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

.NET Core Web API空参数时如何实现Like模糊查询?

解决方案

当然可以实现,你需要动态构建查询条件,同时注意参数类型的适配(比如companyId是int类型,无法直接接收空值,需要改为可空类型int?)。以下是修改后的完整代码:

public async Task<List<Inventory>> GetInventoryList(int? companyId, string userName, int page, int pageSize)
{
    IQueryable<Inventory> query = _context.Inventories;

    // 处理CompanyId条件:有值则精确匹配,空则执行模糊查询(此处针对int类型转字符串实现数字模糊匹配,若需求是不限制则可省略else分支)
    if (companyId.HasValue)
    {
        query = query.Where(x => x.CompanyId == companyId.Value);
    }
    else
    {
        // 转字符串后实现模糊匹配,相当于SQL中的 LIKE '%'(匹配所有),若需特定模糊规则可修改空字符串为目标值
        query = query.Where(x => x.CompanyId.ToString().Contains(""));
    }

    // 处理UserName条件:有值则精确匹配,空则执行模糊查询(匹配Responsible字段的所有内容)
    if (!string.IsNullOrEmpty(userName))
    {
        query = query.Where(x => x.Responsible == userName);
    }
    else
    {
        // 避免null引发异常,先判断字段非空再执行模糊匹配,若需包含null值可改为 x.Responsible == null || x.Responsible.Contains("")
        query = query.Where(x => x.Responsible != null && x.Responsible.Contains(""));
    }

    // 排序
    query = query.OrderByDescending(x => x.CreatedDate);

    // 获取总条数(需在分页前执行,确保总数正确)
    int totalCount = await query.CountAsync();

    // 分页并投影返回结果
    var response = await query.Skip(pageSize * (page - 1))
        .Take(pageSize)
        .Select(x => new Inventory()
        {
            CompanyId = x.CompanyId,
            CreatedDate = x.CreatedDate,
            Barcode = x.Barcode,
            BrandId = x.BrandId,
            BusinessCode = x.BusinessCode,
            CategoryId = x.CategoryId,
            CategorySubId = x.CategorySubId,
            Id = x.Id,
            Imei = x.Imei,
            InventoryDate = x.InventoryDate,
            InvoiceDate = x.InvoiceDate,
            Mac = x.Mac,
            ModelId = x.ModelId,
            Name = x.Name,
            SerialNumber = x.SerialNumber,
            Status = x.Status,
            Responsible = x.Responsible,
            TotalCount = totalCount,
            UpdatedDate = x.UpdatedDate
        }).ToListAsync();

    return response;
}

关键说明:

  • 参数类型修改:将companyId改为int?(可空整数),这样就能接收空参数(前端不传值或传null时)。
  • 动态条件构建:
    • 对于companyId:有值时直接精确匹配字段;空值时将数字转字符串后执行模糊匹配(若你的需求是空值时不限制该字段,直接删除else分支即可)。
    • 对于userName:有值时精确匹配Responsible字段;空值时执行模糊匹配(Contains("")等价于SQL的LIKE '%%',会匹配所有非空的Responsible值,若需包含null可调整条件)。
  • 总条数计算时机:必须在Skip和Take之前执行CountAsync,否则得到的是分页后的条数而非总数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:57