簡體   English   中英

LINQ查詢。 在此上下文中僅支持基元類型或枚舉類型

[英]LINQ query. Only primitive types or enumeration types are supported in this context

我想創建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 原始查詢將查找在AutomaticPermission發生哪個CompanyIdEmployeeId Permissions ,但不一定是對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM