我正在使用存储库模式开发 .NET Core WebApi 项目,但在为特定情况实现解决方案时遇到问题:
这是我的 Controller 方法,我在其中传递一个名为 name 的变量,我将使用该变量为 LINQ 查询创建表达式
public async Task<ActionResult<ActivityDto>> GetPaginated(int page, int size, string name)
{
var entities = await _activityService.GetPaginatedActivitiesAsync(page, size, name);
if (!entities.Any())
return NotFound();
return new ObjectResult(entities) { StatusCode = StatusCodes.Status200OK };
}
Run Code Online (Sandbox Code Playgroud)
我的服务层的方法中也有这段代码,我用它来创建特定的表达式,然后调用我的存储库方法来执行特定的查询。
Expression<Func<Activity, bool>> filter = u => u.Name.Equals(name);
var entities = await _activityRepository.GetPaginatedAsync(page, size, filter);
Run Code Online (Sandbox Code Playgroud)
这是我的存储库中的行,我在其中执行查询,该查询根据输入名称返回所有记录。
await _context.Set<TEntity>().Where(filter).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
当我将某个字符串传递给控制器中的 name 变量时,所有代码都可以正常工作。问题是我应该检查用户是否为名称字段输入了任何字符串,如果没有则返回所有记录。所以我的问题是:有没有办法创建类似空表达式的东西,然后由 LINQ 查询执行?
c# linq-expressions entity-framework-core asp.net-core-webapi