C# LINQ查询。在此上下文中仅支持基元类型或枚举类型

C# LINQ查询。在此上下文中仅支持基元类型或枚举类型,c#,linq,C#,Linq,我想创建LINQ查询检查在当月创建的自动权限。我的权限列表包括员工和公司,然后我想获得当月为这些夫妇创建的权限列表。不幸的是,它返回异常:“其他信息:无法创建“Exence.CRM.Dto.AutomaticPermissionDto”类型的常量值。在此上下文中仅支持基元类型或枚举类型”。如何修复第二个查询 var automaticPermission = await context.AutomaticPermission .AsNoTracking()

我想创建LINQ查询检查在当月创建的自动权限。我的权限列表包括员工和公司,然后我想获得当月为这些夫妇创建的权限列表。不幸的是,它返回异常:“其他信息:无法创建“Exence.CRM.Dto.AutomaticPermissionDto”类型的常量值。在此上下文中仅支持基元类型或枚举类型”。如何修复第二个查询

var automaticPermission = await context.AutomaticPermission
                    .AsNoTracking()
                    .Select(x => new AutomaticPermissionDto
                    {
                        EmployeeId = x.EmployeeId,
                        CompanyId = x.CompanyId
                    }).ToListAsync();

                var currentlyAutomaticPermissions = await context.Permissions
                        .Where(x => automaticPermission.Select(c => c.EmployeeId).Contains(x.EmployeeId) &&
                                    automaticPermission.Select(c => c.CompanyId).Contains(x.CompanyId) &&
                                    x.IssueDate.Month == DateTime.Today.Month)
                        .AsNoTracking()
                        .ToListAsync();

似乎您正在寻找在
自动许可
中具有匹配数据的
权限。您可以在一个LINQ查询中更有效地实现这一点,同时解决您的问题:

var currentlyAutomaticPermissions = await context.Permissions
        .Where(x => context.AutomaticPermission
                           .Any(at => at.EmployeeId == x.EmployeeId 
                                   && at.CompanyId == x.CompanyId)
                 && x.IssueDate.Month == DateTime.Today.Month)
        .AsNoTracking()
        .ToListAsync();

这不仅效率更高,我还认为匹配更准确,因为它匹配成对的
CompanyId
EmployeeId
。原始查询将找到
权限
,其中
公司ID
员工ID
出现在
自动审核
中,但不一定成对出现。

单独列出员工ID和公司ID,并在查询中使用它们。EF不知道如何将DTO转换为SQL。