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

fjaof16o  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(71)

我有以下代码

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

wz3gfoph

wz3gfoph1#

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

字符串
不会过滤出检索到的任务,它只会过滤出TaskStatus,它没有用户和公司的任务,但会包括这些状态的所有任务(如果投影包括它们)。
实际上,查询TaskStatus然后将其Map到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,将其与自动Map器合并结合起来。

相关问题