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

时间:2017-05-19 20:54:34

标签: c# asp.net-mvc

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

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;

我在allApproveUsers中有9个项目,在我经过35个左右deptApproveUsers后,我在列表中只有10个项目,而不管是否应添加15个项目。我哪里错了?

3 个答案:

答案 0 :(得分:0)

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

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

而不是

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

希望,这有帮助。

答案 1 :(得分:0)

我希望有一些有用的扩展功能来执行此操作:

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中已存在测试:

 if (!allApproveUsers.Any(e => e.UserID == deptUser.UserID))
      allApproveUsers = allApproveUsers.Append(deptUser).ToList();

答案 2 :(得分:0)

为什么不使用LINQ去除重复项?

private static IQueryable<T> GetUniqueValues(IQueryable<T> sequence)
{
    return from s in sequence 
           select s;
}    

其中:

Try with this code it may help you