能否为LINQ的Where筛选器添加动态条件判断?
可以实现,修改方案如下
直接通过条件分支动态构建查询逻辑即可,完全满足你的需求:
[HttpGet("search")] public IActionResult SearchPerson([FromQuery] string v="A", [FromQuery] int page=1) { var query = _ctx.People.AsQueryable(); // 根据参数v的长度切换筛选规则 if (v.Length > 1) { query = query.Where(p => (p.FirstName + p.LastName).Contains(v)); } else { query = query.Where(p => p.FirstName.StartsWith(v)); } var personList = query.Skip((page - 1) * 30) .Take(30); return Ok(personList); }
额外提示
- EF Core 可以正确识别
p.FirstName + p.LastName这类字符串拼接操作,会将其翻译为对应数据库的字符串拼接SQL函数(比如SQL Server的CONCAT),不会把全量数据拉到内存处理,性能不受影响。 - 如果参数
v可能为空字符串,建议额外增加!string.IsNullOrEmpty(v)的判断,避免出现不符合预期的筛选结果。
内容的提问来源于stack exchange,提问作者T'sen Ang
相关产品推荐
相关产品推荐

