2017-07-13 25 views
-1

我有4个表Transactions,Attachment,SubReportType & SubRepRole。我在我的缓存中拥有用户角色。我想有那些与用户角色相关附件[用户可以拥有多个角色]LINQ查询WHERE IN clasue

List<int> userrole = new List<int>(); 
UserContext user_details = (UserContext)HttpContext.Current.Cache["UserContext"]; 
IList<UserRole> userrole_id = user_details.UserRoleModuleWise; 

var query = (from trans in objContext.Transactions 
      join attch in objContext.Attachment on trans.TransId equals attch.TransId 
      join subrept in objContext.SubReportType on trans.SubRepId equals subrept.SubRepId 
      join subreprl in objContext.SubRepRole on trans.SubRepId equals subreprl.SubRepId 
      join selectedrole in userrole_id on subreprl.RoleId equals selectedrole.RoleId 
      /*where obj.Contains(subreprl.RoleId) */orderby trans.TransDate 
      select new AttachmentModel 
      { 
       Createdate = attch.CreatedDateTime, 
       FileType = attch.FileType, 
       FileName = attch.FileName, 
       Attachid = attch.AttachedId, 
       FileTag = attch.FileTag, 
       Transid = trans.TransId, 
       SubReportName = subrept.SubRepName, 
       RandomPinNo = attch.FileRandomPin 
      }).ToList(); 

现在收到此错误:

Unable to create a constant value of type 'User.Common.DataContract.UserRole'. Only primitive types or enumeration types are supported in this context.

这个请大家帮忙。也尝试过“包含”,但类型转换错误即将到来。只是想要在user_details.UserRoleModuleWise中有角色的记录。 user_details.UserRoleModuleWise是角色ID和角色名

+0

你想要检查/ *哪里obj.Contains(subreprl.RoleId)*。 –

回答

1

您需要使用Contains与正确值的数组的数组:

where user_details.UserRoleModuleWise.Select(urmw => urmw.RoleId).ToArray().Contains(aRoleId => aRoleId == subreprl.RoleId) 
0

创建一个通用类 -

object[] common_data = new object[4]; 
    UserContext user_details = (UserContext)HttpContext.Current.Cache["UserContext"]; 
     List<UserRole> userrole_id = user_details.UserRoleModuleWise.ToList(); 
     int[] roleid = { -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20 }; 
     string[] rolename = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; 
     for (int i = 0; i < userrole_id.Count; i++) 
      { 
       roleid[i] = Convert.ToInt32(userrole_id[i].RoleId); 
       rolename[i] = Convert.ToString(userrole_id[i].RoleName); 
       r_id.Add(roleid[i], rolename[i]); 
      } 
      common_data[0] = roleid; 
      common_data[1] = rolename; 
      //common_data[2] = username; 
      common_data[3] = userrole_id.Count; 

然后在我我使用的储存库 -

 User_common_data ucd = new User_common_data(); 
     object[] ucd_data = ucd.user_common_details(); 
     int[] roles = (int[]) ucd_data[0]; 

     var query = (from obj in objContext.ReportType 
        join obj1 in objContext.SubReportType on obj.RepId equals obj1.RepId 
        join obj2 in objContext.SubRepRole on obj1.SubRepId equals obj2.SubRepId 
        where roles.Contains(obj2.RoleId) 
        select new ReportTypeModel 
        { 
         RepId = obj.RepId, 
         RepName = obj.RepName, 
         RepCode = obj.RepCode 
        }).ToList(); 

现在它的工作正常。 @ NetMage的答案也奏效了......谢谢