2017-07-07 92 views
-2

背景通过值的LINQ选择

我一直在LINQ广泛合作的内部外部列表进行遍历,我有我期待在为了给我创造的能力,以修改LINQ声明对象列表。

问题

目前,我有我使用给我一个结果,我感到在LINQ声明绑定到我的数据模型LINQ的声明。然而,我的数据模型中的最后一个属性是一个bools列表,但为了获得我的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

我想循环访问List listtest列表,其中包含两个属性。有了这个说我想在我的LINQ语句中遍历它们。Permission = a.AccessRights [* listtest *] – EasyE

+0

您发布的数据模型不完整。您的查询使用更多的自定义类型。你可以请张贴[mcve]吗? – Enigmativity

回答

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(); 
+0

WOW +1谢谢 – EasyE