首页 > 解决方案 > System.NotSupportedException:- 无法创建“System.Char”类型的常量值。仅支持原始类型或枚举类型

问题描述

我的 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());
   }

但是在返回语句中,我收到了这个错误:-

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-mvcentity-frameworklinq

解决方案


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是字符串列表。

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


推荐阅读