背景
我一直在与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列表中第一个索引的值的所有结果。 但是,我希望迭代另一个列表以获取权限值,因为我的长手代码在顶部。
答案 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();