迭代LINQ Select中的外部值列表

时间:2017-07-07 00:27:37

标签: c# linq

背景

我一直在与LINQ广泛合作,我有一个LINQ语句,我希望修改它,以便让我能够创建一个对象列表。

问题

我目前有一个LINQ语句,我用它来给我一个结果,我绑定到LINQ语句中的数据模型。但是,我的数据模型中的最后一个属性是bool列表,但为了得到我的bool值,我需要迭代一个属性列表,并将bool值或每个属性放在一个单独的列表中。

代码

class GroupDetails
{
    public string Name { get; set; }
    public string Description { get; set; }
    public List<bool> Permissions { get; set; }
    public List<string> GroupsUsers { get; set; }
}
static void Main(string[] args)
{
   RRApplication app = new RRApplication();
   List<GroupDetails> collectionOfGroups = new List<GroupDetails>();
   List<RRAccessRightType> Listofpermissions = new List<RRAccessRightType>() { RRAccessRightType.artAccountAllowChange, RRAccessRightType.artAccountMapping };
   RRProtectionSetup securitySetup = app.Protection;
   foreach(RRGlobalGroup group in securitySetup.Groups)
   {
                RRGlobalAssignedUsers usersAssignedCollection = group.AssignedUsers;
                GroupDetails groupDetail = new GroupDetails();
                groupDetail.Permissions = new List<bool>();
                groupDetail.GroupsUsers = new List<string>();                    
                groupDetail.Name = group.Name;
                groupDetail.Description = group.Description;
                foreach (RRGlobalAssignedUser user in usersAssignedCollection)
                {
                    groupDetail.GroupsUsers.Add(user.UserId);
                }
                for (int counter = 0; counter < Listofpermissions.Count; counter++)
                {
                    groupDetail.Permissions.Add(group.AccessRights[Listofpermissions[counter]]);
                }
                collectionOfGroups.Add(groupDetail);
   }
}

LINQ声明

List<GroupDetails> groupUsers = app.Protection.Groups.Cast<RRGlobalGroup>()
      .Select(a => new GroupDetails {
           Name = a.Name,
           Description = a.Description,
           GroupsUsers = a.AssignedUsers.Cast<RRGlobalAssignedUser>()
               .Select(b => b.UserId).ToList(),
           Permissions = a.AccessRights[Listofpermissions[0]]}).ToList();

所需的输出

  Name :  group1
  Description : DevGroup1
  GroupsUsers :["1234","5678"]
  Permissions:[true, false]

附录

正如您所看到的,当前的LINQ语句将向我提供用户列表以及Listofpermissions列表中第一个索引的值的所有结果。 但是,我希望迭代另一个列表以获取权限值,因为我的长手代码在顶部。

1 个答案:

答案 0 :(得分:1)

我认为如果你使用相同的lambda变量名作为循环代码会很有帮助。这应该将所有Permissions聚集在一起。

List<GroupDetails> groupUsers = app.Protection.Groups.Cast<RRGlobalGroup>()
      .Select(group => new GroupDetails {
          Name = group.Name,
          Description = group.Description,
          GroupsUsers = group.AssignedUsers.Cast<RRGlobalAssignedUser>()
               .Select(user => user.UserId).ToList(),
          Permissions = Listofpermissions.Select(count => group.AccessRights[count]).ToList()
      }).ToList();