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

标签 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();

最佳答案

您似乎正在寻找在 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();

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

关于c# - LINQ 查询。在此上下文中仅支持原始类型或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387362/

相关文章:

c# - 资源 (.resx) 文件有什么好处?

c# - Sql查询与Linq数据查询性能对比

c# - 仅当所有 ID 或更多 ID 都存在时才查找两个不同列表对象之间的匹配 ID?

c# - Foreach 循环正确 - 检查 .Any() 返回错误

c# - 使用条件将一次性大型 IEnumerable<T> 分成两半

c# - 使用通用回调是一种不好的形式吗?

c# - TSQL + C# : Dynamically changing the Database in use

c# - 在数据表中查找重复项然后比较重复项

c# - 如何格式化 MS Chart 控件中的 Axis

c# - 具有动态目标的 CaSTLe 接口(interface)代理