C# 将单个列表项添加到另一个列表

C# 将单个列表项添加到另一个列表,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试合并我的两个列表,以便列表中没有重复项。我要做的第一件事就是抓住所有可以批准的用户 var allUsers = _dbContext.UserRoleClientEmployeeAssignments.Where(urcea => urcea.CompanyID == employee.CompanyID && urcea.ClientID == employee.ClientID && urcea.Users.Enabled).ToList()

我正在尝试合并我的两个列表,以便列表中没有重复项。我要做的第一件事就是抓住所有可以批准的用户

var allUsers = _dbContext.UserRoleClientEmployeeAssignments.Where(urcea => urcea.CompanyID == employee.CompanyID && urcea.ClientID == employee.ClientID && urcea.Users.Enabled).ToList();
var allApproveUsers = allUsers.Where(urcea => urcea.ApproveAllPTO).ToList();
然后我得到了所有可以批准的部门用户

var deptSecurityUsers = _dbContext.UserDeptDivSecurities.Where(udds => udds.CompanyID == employee.CompanyID && udds.ClientID == employee.ClientID && udds.Department == dept && udds.ApprovePTO).ToList();
var deptApproveUsers = allUsers.Where(au => deptSecurityUsers.Any(ds => ds.UserID == au.UserID)).ToList();
然后,我浏览列表,如果它不存在于
allApproveUsers
中,我会尝试添加它

object concatUsers = null;
// check for existing user
foreach (var deptUser in deptApproveUsers)
{
     var exists = allApproveUsers.FirstOrDefault(e => e.UserID == deptUser.UserID);
      if (exists == null)
      {
          concatUsers = allApproveUsers.Concat(new[] {deptUser}).ToList();
      }
}

return (List<UserRoleClientEmployeeAssignment>) concatUsers;
对象concatuers=null;
//检查现有用户
foreach(DeptApproverUsers中的var deptUser)
{
var exists=allApproveUsers.FirstOrDefault(e=>e.UserID==deptUser.UserID);
if(exists==null)
{
concatUsers=allApproveUsers.Concat(新[]{deptUser}).ToList();
}
}
返回(列表)concatators;

我在
allApproveUsers
中有9个项目,经过35个左右的
deptApproveUsers
之后,我在列表中只有10个项目,而不考虑应该添加15个项目。我哪里出错了?

您总是将
allApprovedUsers
(计数为9)添加到单个
deptUser
(这就是为什么
concatUsers
始终保持为10)。您可以在下面尝试:

allApprovedUsers = allApprovedUsers.Concat(new [] {deptUser}).ToList();
而不是

concatUsers = allApprovedUsers.Concat(new [] {deptUser}).ToList();

希望有帮助。

您总是将
allApprovedUsers
(计数为9)添加到单个
deptUser
(这就是为什么
concatUsers
始终保持为10)。您可以在下面尝试:

allApprovedUsers = allApprovedUsers.Concat(new [] {deptUser}).ToList();
而不是

concatUsers = allApprovedUsers.Concat(new [] {deptUser}).ToList();

希望有帮助。

我希望有一些有用的扩展函数来实现这一点:

public static IEnumerable<T> Prepend<T>(this IEnumerable<T> rest, params T[] first) => first.Concat(rest);
public static IEnumerable<T> Append<T>(this IEnumerable<T> rest, params T[] last) => rest.Concat(last);

我希望有一些有用的扩展函数来实现这一点:

public static IEnumerable<T> Prepend<T>(this IEnumerable<T> rest, params T[] first) => first.Concat(rest);
public static IEnumerable<T> Append<T>(this IEnumerable<T> rest, params T[] last) => rest.Concat(last);

你为什么不直接用LINQ来消除重复项呢

allApproveUsers.AddRange(deptApproveUsers);
var uniqueUsers = GetUniqueValues(allApproveUsers).ToList();
其中:

private static IQueryable<T> GetUniqueValues(IQueryable<T> sequence)
{
    return from s in sequence 
           select s;
}    
private静态IQueryable GetUniqueValues(IQueryable序列)
{
按顺序从s返回
选择s;
}    

为什么不使用LINQ来消除重复项呢

allApproveUsers.AddRange(deptApproveUsers);
var uniqueUsers = GetUniqueValues(allApproveUsers).ToList();
其中:

private static IQueryable<T> GetUniqueValues(IQueryable<T> sequence)
{
    return from s in sequence 
           select s;
}    
private静态IQueryable GetUniqueValues(IQueryable序列)
{
按顺序从s返回
选择s;
}