C# 防止foreach语句中出现多个条目
以下代码填充不属于现有列表“selectedUsers”的用户列表C# 防止foreach语句中出现多个条目,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,以下代码填充不属于现有列表“selectedUsers”的用户列表 foreach (var childOrg in viewModel.ChildOrganizations) { List<OrganizationUserViewModel> childOrgUsers = new List<OrganizationUserViewModel>(); var users = this._organizationManager.GetOrganizatio
foreach (var childOrg in viewModel.ChildOrganizations)
{
List<OrganizationUserViewModel> childOrgUsers = new List<OrganizationUserViewModel>();
var users = this._organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach (var user in users)
{
var userViewModel = Gateway.Instance.Map<User, OrganizationUserViewModel>(user.User);
userViewModel.Organization_UserId = user.Organization_UserId;
if (selectedUsers != null)
{
foreach (OrganizationUserViewModel selectedUser in selectedUsers)
{
if (selectedUser.UserId != userViewModel.UserId)
{
childOrgUsers.Add(userViewModel);
}
}
}
}
childOrg.Users = childOrgUsers;
}
foreach(viewModel.ChildOrganizations中的var childOrg)
{
List childOrgUsers=新列表();
var users=this.\u organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach(用户中的var用户)
{
var userViewModel=Gateway.Instance.Map(user.user);
userViewModel.Organization\u UserId=user.Organization\u UserId;
如果(selectedUsers!=null)
{
foreach(OrganizationUserViewModel selectedUser中的selectedUser)
{
if(selectedUser.UserId!=userViewModel.UserId)
{
添加(userViewModel);
}
}
}
}
childOrg.Users=childOrgUsers;
}
如果“selectedUsers”中只存在一个用户,则此方法可以正常工作,但如果存在多个条目,则foreach循环会对新列表进行多次添加。我该如何避免这种情况
提前感谢您的帮助
编辑:我刚刚通读了我的问题,我可能应该澄清一下,因为我真的没有说清楚。当foreach为列表中的每个条目运行时,当ID与userViewModel中的当前条目不匹配时,它还会为所选用户添加条目。这些是我真正需要重点删除的内容,因为我希望存储在selectedUsers中的任何内容都不会出现在userViewModel中。很抱歉没有澄清 我希望我已经理解了这个问题。
缓存从方法
Gateway.Instance.Map
检索到的所有用户id,然后将缺少的id添加到列表中:
foreach (var childOrg in viewModel.ChildOrganizations)
{
var allUserId = new HashSet<int>();
var users = this._organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach (var user in users)
{
var userViewModel = Gateway.Instance.Map<User, OrganizationUserViewModel>(user.User);
userViewModel.Organization_UserId = user.Organization_UserId;
allUserId.Add(userViewModel.UserId);
}
var childOrgUsers = new List<OrganizationUserViewModel>();
if (selectedUsers != null)
{
foreach (OrganizationUserViewModel selectedUser in selectedUsers)
{
if(allUserId.Contains(selectedUser.UserId) == false)
{
childOrgUsers.Add(userViewModel);
}
}
}
childOrg.Users = childOrgUsers;
}
foreach(viewModel.ChildOrganizations中的var childOrg)
{
var allUserId=new HashSet();
var users=this.\u organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach(用户中的var用户)
{
var userViewModel=Gateway.Instance.Map(user.user);
userViewModel.Organization\u UserId=user.Organization\u UserId;
添加(userViewModel.UserId);
}
var childOrgUsers=新列表();
如果(selectedUsers!=null)
{
foreach(OrganizationUserViewModel selectedUser中的selectedUser)
{
if(allUserId.Contains(selectedUser.UserId)=false)
{
添加(userViewModel);
}
}
}
childOrg.Users=childOrgUsers;
}
我希望我已经理解了这个问题。缓存从方法
Gateway.Instance.Map
检索到的所有用户id,然后将缺少的id添加到列表中:
foreach (var childOrg in viewModel.ChildOrganizations)
{
var allUserId = new HashSet<int>();
var users = this._organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach (var user in users)
{
var userViewModel = Gateway.Instance.Map<User, OrganizationUserViewModel>(user.User);
userViewModel.Organization_UserId = user.Organization_UserId;
allUserId.Add(userViewModel.UserId);
}
var childOrgUsers = new List<OrganizationUserViewModel>();
if (selectedUsers != null)
{
foreach (OrganizationUserViewModel selectedUser in selectedUsers)
{
if(allUserId.Contains(selectedUser.UserId) == false)
{
childOrgUsers.Add(userViewModel);
}
}
}
childOrg.Users = childOrgUsers;
}
foreach(viewModel.ChildOrganizations中的var childOrg)
{
var allUserId=new HashSet();
var users=this.\u organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach(用户中的var用户)
{
var userViewModel=Gateway.Instance.Map(user.user);
userViewModel.Organization\u UserId=user.Organization\u UserId;
添加(userViewModel.UserId);
}
var childOrgUsers=新列表();
如果(selectedUsers!=null)
{
foreach(OrganizationUserViewModel selectedUser中的selectedUser)
{
if(allUserId.Contains(selectedUser.UserId)=false)
{
添加(userViewModel);
}
}
}
childOrg.Users=childOrgUsers;
}
好的。我想我知道你现在需要什么了。试试这个
foreach (var childOrg in viewModel.ChildOrganizations)
{
List<OrganizationUserViewModel> childOrgUsers = new List<OrganizationUserViewModel>();
var users = this._organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach (var user in users)
{
var userViewModel = Gateway.Instance.Map<User, OrganizationUserViewModel>(user.User);
userViewModel.Organization_UserId = user.Organization_UserId;
if (selectedUsers != null)
{
var foundUser = selectedUsers.FirstOrDefault(x => x.UserId == userViewModel.UserId);
if(foundUser == null)
{
childOrgUsers.Add(userViewModel);
}
}
}
childOrg.Users = childOrgUsers.Distinct().ToList();
}
foreach(viewModel.ChildOrganizations中的var childOrg)
{
List childOrgUsers=新列表();
var users=this.\u organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach(用户中的var用户)
{
var userViewModel=Gateway.Instance.Map(user.user);
userViewModel.Organization\u UserId=user.Organization\u UserId;
如果(selectedUsers!=null)
{
var foundUser=selectedUsers.FirstOrDefault(x=>x.UserId==userViewModel.UserId);
if(foundUser==null)
{
添加(userViewModel);
}
}
}
childOrg.Users=childOrgUsers.Distinct().ToList();
}
好的。我想我知道你现在需要什么了。试试这个
foreach (var childOrg in viewModel.ChildOrganizations)
{
List<OrganizationUserViewModel> childOrgUsers = new List<OrganizationUserViewModel>();
var users = this._organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach (var user in users)
{
var userViewModel = Gateway.Instance.Map<User, OrganizationUserViewModel>(user.User);
userViewModel.Organization_UserId = user.Organization_UserId;
if (selectedUsers != null)
{
var foundUser = selectedUsers.FirstOrDefault(x => x.UserId == userViewModel.UserId);
if(foundUser == null)
{
childOrgUsers.Add(userViewModel);
}
}
}
childOrg.Users = childOrgUsers.Distinct().ToList();
}
foreach(viewModel.ChildOrganizations中的var childOrg)
{
List childOrgUsers=新列表();
var users=this.\u organizationManager.GetOrganizationUsers(childOrg.OrganizationId);
foreach(用户中的var用户)
{
var userViewModel=Gateway.Instance.Map(user.user);
userViewModel.Organization\u UserId=user.Organization\u UserId;
如果(selectedUsers!=null)
{
var foundUser=selectedUsers.FirstOrDefault(x=>x.UserId==userViewModel.UserId);
if(foundUser==null)
{
添加(userViewModel);
}
}
}
childOrg.Users=childOrgUsers.Distinct().ToList();
}
如果我理解正确,您需要类似于ExceptBy
childOrg.Users = users.ExceptBy(selectedUsers, u=>u.UserId)
公共静态类MyExtensions
{
公共静态IEnumerable ExceptBy(
这个IEnumerable列表1,
IEnumerable列表2,
Func键选择器)
{
HashSet knownKeys=新的HashSet(list2.Select(x=>keySelector(x));
返回列表1.Where(x=>knownKeys.Add(keySelector(x));
}
}
如果我理解正确,您需要类似于ExceptBy
childOrg.Users = users.ExceptBy(selectedUsers, u=>u.UserId)
公共静态类MyExtensions
{
公共静态IEnumerable ExceptBy(
这个IEnumerable列表1,
IEnumerable列表2,
Func键选择器)
{
HashSet knownKeys=新的HashSet(list2.Select(x=>keySelector(x));
返回列表1.Where(x=>knownKeys.Add(keySelector(x));
}
}
您是否尝试过使用Distinct?。。。childOrg.Users=childOrgUsers.Distinct().ToList();谢谢你的回复。我已经试过了