c# – 在此上下文中仅支持基本类型(如Int32,String和Guid)

前端之家收集整理的这篇文章主要介绍了c# – 在此上下文中仅支持基本类型(如Int32,String和Guid)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我收到以下错误

Unable to create a constant value of
type
‘Phoenix.Intranet.Web.ClientSettings.ComponentRole’.
Only primitive types (‘such as Int32,
String,and Guid’) are supported in
this context.

我明白为什么错误发生.我不明白的是为什么我的代码创建错误.我的比较是反对原始类型.所有比较都是Guid to Guid.该错误明确指出,圭ids是好的.

该行发生错误(向下):

  1. var vla = (from cir in phoenixEntities.ComponentInRoles

码:

  1. List<ComponentRole> roles;
  2. using (IMSMembershipEntities entities = new IMSMembershipEntities())
  3. {
  4. roles = (from role1 in entities.Roles
  5. select new ComponentRole{Name = role1.RoleName,RoleId = role1.RoleId} ).ToList();
  6. }
  7.  
  8. List<Components> componentInRoles;
  9.  
  10. using (PhoenixEntities phoenixEntities = new PhoenixEntities())
  11. {
  12. phoenixEntities.ContextOptions.LazyLoadingEnabled = false;
  13. componentInRoles = (from component in phoenixEntities.Components
  14. select new Components{Name = component.Name,ComponentId = component.ComponentId,//InRoles = (from componentInRole in phoenixEntities.ComponentInRoles
  15. // join role in roles on componentInRole.RoleId equals role.RoleId
  16. // where componentInRole.ComponentId == component.ComponentId
  17. // select new ComponentRole{RoleId = role.RoleId,Name = role.Name})
  18. }
  19. ).ToList();
  20.  
  21.  
  22. foreach (Components cmpent in componentInRoles)
  23. {
  24. Components cmpent1 = cmpent;
  25. //cmpent.InRoles =
  26.  
  27. var vla = (from cir in phoenixEntities.ComponentInRoles
  28. join role in roles on cir.RoleId equals role.RoleId
  29. where cir.ComponentId == cmpent1.ComponentId
  30. select role).ToList();
  31. }
  32. }

解决方法

EntityFramework和Linq to sql都尝试将这样的查询转换为sql IN操作符,这些查询是内存中的一部分,另一部分在数据库中.

并且因为你的类哪个角色是一个IEnumerable是不是一个原始类型,它不能被翻译成SQL查询.

您应该首先从数据库获取内存,然后在内存中加入两个列表.

例如:

  1. var vla = (from cir in phoenixEntities.ComponentInRoles.ToList()
  2. join role in roles on cir.RoleId equals role.RoleId
  3. where cir.ComponentId == cmpent1.ComponentId
  4. select role).ToList();

我希望我能帮忙

猜你在找的C#相关文章