.Net EF Core Automapper ProjectTo 过滤不起作用

问题描述 投票:0回答:1

我有以下代码

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”子句中的所有条件根本没有得到应用,并且查询正在检索来自不同公司和不同用户的任务。为什么?

c# asp.net asp.net-core asp.net-web-api automapper
1个回答
0
投票
.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 将其与自动映射器结合起来。

© www.soinside.com 2019 - 2024. All rights reserved.