LINQ查询。在此上下文中仅支持原始类型或枚举类型

时间:2018-09-18 13:09:39

标签: c# linq

我想创建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();

1 个答案:

答案 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();

这不仅效率更高,而且还认为匹配更为准确,因为它匹配CompanyIdEmployeeId对。原始查询将找到PermissionsCompanyId出现在EmployeeId中的AutomaticPermission,但不一定成对出现。