2017-07-07 87 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