我有以下一段代码

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‘S,然后构建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来将其与Automapper相结合.

Csharp相关问答推荐

是否可以将gltf转换为字节数组,然后将字节数组转换回文件?

ß != ss与ICU进行不区分大小写的比较

下拉图片点击MudBlazor

如何使用C#和Graph API从Azure Directory获取用户详细信息

如何使用C#中的图形API更新用户配置文件图像

如何告诉自己创建的NuGet包在应用程序中发生了变化?

实体框架核心上是否支持使用NPGSQL的字符串聚合?

MudBlazor—MudDataGrid—默认过滤器定义不允许用户修改基本过滤器

实体框架核心中的ComplexType和OwnsOne有什么不同?

在静态模式下实例化配置

如何将FindAll()与Nuget包Interop.UIAutomationClient一起使用

HttpClient SendAsync与多线程环境中的ArchiveZip

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

在扩展方法中,IEnumerable<;T>;不会转换为IEumerable<;T&>

{ or ; expected error如何解决此问题

Visual Studio,Docker容器-容器调用:连接被拒绝

为什么我可以在注册表编辑器中更改值,但不能在以管理员身份运行的C#表单应用程序中更改?

Linq SELECT的多条指令

如何阻止可传递依赖项出现在项目中

客户端/服务器RPC如何处理全局变量?