linq .NET EF Core Automapper ProjectTo筛选不起作用

fjaof16o  于 2024-01-03  发布在  .NET
关注(0)|答案(1)|浏览(209)

我有以下代码

  1. var taskDTOs = await _repo.GetQueryable<TaskStatus>()
  2. .Where(s => s.Tasks.Any(t =>t.CompanyId == _userContext.CompanyId &&
  3. t.UserId == _userContext.UserId))
  4. .ProjectTo<GetTaskListDTO>(_mapper.ConfigurationProvider)
  5. .ToListAsync();

字符串
问题是,“Where”子句中的所有条件根本没有被应用,并且查询从不同的公司和不同的用户检索任务。为什么?

wz3gfoph

wz3gfoph1#

  1. .Where(s => s.Tasks.Any(t =>t.CompanyId == _userContext.CompanyId &&
  2. t.UserId == _userContext.UserId))

字符串
不会过滤出检索到的任务,它只会过滤出TaskStatus,它没有用户和公司的任务,但会包括这些状态的所有任务(如果投影包括它们)。
实际上,查询TaskStatus然后将其Map到GetTaskListDTO有点奇怪,基于名称,听起来你应该只查询Task然后构建DTO。沿着这些行:

  1. var tasks = await _repo.GetQueryable<Task>()
  2. .Where(t =>t.CompanyId == _userContext.CompanyId &&
  3. t.UserId == _userContext.UserId)
  4. //.ProjectTo<GetTaskDTO>(_mapper.ConfigurationProvider) // optional intermediate dto
  5. .ToListAsync();
  6. var result = new GetTaskListDTO // or setup mapping
  7. {
  8. };


您可以引入一些中间DTO,将其与自动Map器合并结合起来。

展开查看全部

相关问题