我在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:
所以有人可以对此提出建议吗?谢谢
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
是字符串列表。否则,请提供更多详细信息以便进一步提供帮助。