System.NotSupportedException:-无法创建类型为'System.Char'的常量值。仅支持基本类型或枚举类型

问题描述 投票:-1回答:1

我在asp.net mvc-5和实体框架5中具有以下代码:-

public bool customerEligableforDeleteAllDelete(long customerid, long cid)
   {
var superadminusers = ourdbset.SecurityRoles
    .SingleOrDefault(a => a.Name.ToLower() == "super administrator")
    .SecurityRoleUsers
    .Select(a=>a.UserName.ToLower().Trim())
    .ToList();
var superadminusersbygroups = ourdbset.SecurityRoles
    .SingleOrDefault(a => a.Name.ToLower() == "super administrator")
    .Groups
    .Select(a=>a.ourdbsetUserGroups
            .SelectMany(a1 => a1.UserName.ToLower().Trim()))
    .ToList();
var allsuperadminusers = superadminusers.Union(superadminusersbygroups).ToArray();
var accountCI = entities.AccountCIs
    .SingleOrDefault(a => a.CIID == cid);

return ((ourdbset.DeleteAllRequests
        .Where(a => a.CustomerID == customerid
            && !a.Approved
            && allsuperadminusers.Contains(a.RequestedBy.ToLower().Trim())
            && accountCI.ATTRIBUTE_1501.ToLower() == "inactive"))
        .ToList().Count() == allsuperadminusers.Count());
   }

但是在return语句上,我收到此错误:-

System.NotSupportedException was unhandled by user code
  HResult=-2146233067
  Message=Unable to create a constant value of type 'System.Char'. Only primitive types or enumeration types are supported in this context.
  Source=System.Data.Entity
  StackTrace:

所以有人可以对此提出建议吗?谢谢

c# asp.net-mvc entity-framework linq
1个回答
0
投票
accountCI.ATTRIBUTE_1501.ToLower() == "inactive")
首先观察,这不应该出现在您对db的查询中。实现查询后,请执行此过滤器。

其次,比较字符串时,请使用.Equals()而不是==

第三,我对查询中使用.Trim()有疑问,我不确定它是否100%可靠。

而且,直接返回查询结果也不是一个好习惯。尝试在一个变量中具体化查询,然后返回该变量(更易于调试,更清晰)。例如:

var queryResults = ourdbset.DeleteAllRequests .Where(a => a.CustomerID == customerid && !a.Approved && allsuperadminusers.Contains(a.RequestedBy.ToLower().Trim()) .ToList(); var count = queryResults.Where(accountCI.ATTRIBUTE_1501.ToLower().Equals("inactive").Count(); var areEqual = count == allsuperadminusers.Count(); return areEqual;

如果这不能解决您的问题,我建议您在这里看看:allsuperadminusers.Contains(a.RequestedBy.ToLower().Trim())。确保allsuperadminusers是字符串列表。

否则,请提供更多详细信息以便进一步提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.