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