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

如何创建兼容EF Core的参数化函数表达式以筛选用户实体

按多字段筛选用户实体的实现与误解澄清

需求背景

需要按名称类字段筛选AuthenticatedUserModel实体,涉及UPN、登录名、显示名、邮箱等多种类型字段,因此将冗长的筛选逻辑提取为一个接收搜索字符串、返回Expression<Func<AuthenticatedUserModel, bool>>的委托。

筛选逻辑实现代码

public Func<string, Expression<Func<AuthenticatedUserModel, bool>>> MatchByName =>
        filter => x =>
            x.StatusId != StatusId.Deleted
            && x.StatusId != StatusId.Unprepped
            && SupportedRecordTypes.Contains(x.RecordType)
            && x.LogonName.ToLower().Contains(filter.ToLower())
            && x.DisplayName.ToLower().Contains(filter.ToLower())
            && x.Email.ToLower().Contains(filter.ToLower())
            && x.Upn.ToLower().Contains(filter.ToLower());

查询调用代码

public IQueryable<UsernameResponse> GetNamesLike(string filter)
    {
        return _dbContext.AuthenticatedUsers
            .Where(MatchByName(filter));
    }

常见误解澄清

最初误以为EF Core执行查询时filter参数为空,查看生成的SQL后发现是误解:搜索字符串会作为参数传递,SQL主体中显示的N''只是参数占位符,实际参数值是正确的。

内容的提问来源于stack exchange,提问作者Kyoshiro Kokujou Obscuritas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:45:30