我想创建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();
答案 0 :(得分:3)
您似乎正在寻找Permissions
中具有匹配数据的AutomaticPermission
。您可以在一个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
,但不一定成对出现。