2017-07-07 12 views
-2

背景LINQを選択

内の値の外部リストを反復私はLINQで徹底的に取り組んできた、私は私が私に作成する機能を与えるために変更するのを楽しみにしていLINQ文を持っていますオブジェクトのリスト。

問題は、私は現在、私は私がLINQ文で自分のデータ・モデルに結合していた結果を与えるために使用していますLINQ文を持っています。しかし、私のデータモデルの中の私の最後のプロパティは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

2つのプロパティを保持するList listtestのリストを反復したいと思います。これにより、LINQステートメントで繰り返し処理を実行したいと思っています。Permission = a.AccessRights [* listtest *] – EasyE

+0

投稿したデータモデルは完全ではありません。クエリでさらに多くのカスタムタイプが使用されています。あなたは[mcve]を投稿できますか? – Enigmativity

答えて

1

ループするコードと同じラムダ変数名を使用すると便利だと思います。これですべての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