Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止foreach语句中出现多个条目_C#_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

C# 防止foreach语句中出现多个条目

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

以下代码填充不属于现有列表“selectedUsers”的用户列表

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();谢谢你的回复。我已经试过了