我有以下代码
var taskDTOs = await _repo.GetQueryable<TaskStatus>()
.Where(s => s.Tasks.Any(t =>t.CompanyId == _userContext.CompanyId &&
t.UserId == _userContext.UserId))
.ProjectTo<GetTaskListDTO>(_mapper.ConfigurationProvider)
.ToListAsync();
问题是,“Where”子句中的所有条件根本没有得到应用,并且查询正在检索来自不同公司和不同用户的任务。为什么?
.Where(s => s.Tasks.Any(t =>t.CompanyId == _userContext.CompanyId &&
t.UserId == _userContext.UserId))
不会过滤掉检索到的任务,只会过滤掉没有用户和公司任务的
TaskStatus
。实际上,您查询 TaskStatus
然后将其映射到 GetTaskListDTO
有点奇怪,根据名称,听起来您应该只查询 Task
然后构建 DTO。沿着这些思路:
var tasks = await _repo.GetQueryable<Task>()
.Where(t =>t.CompanyId == _userContext.CompanyId &&
t.UserId == _userContext.UserId)
//.ProjectTo<GetTaskDTO>(_mapper.ConfigurationProvider) // optional intermediate dto
.ToListAsync();
var result = new GetTaskListDTO // or setup mapping
{
};
您可能可以引入一些中间 DTO 将其与自动映射器结合起来。