我想创建 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();
最佳答案
您似乎正在寻找在 AutomaticPermission
中具有匹配数据的 Permissions
。您可以在一个 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
。原始查询将查找 Permissions
,其中 CompanyId
和 EmployeeId
出现在 AutomaticPermission
中,但不一定成对出现。
关于c# - LINQ 查询。在此上下文中仅支持原始类型或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387362/