2017-05-19 7 views
1

Ich versuche, zwei Listen zu kombinieren, damit es keine Duplikate in der Liste gibt. Das erste, was ich mache, ist, alle Benutzer zu finden, die sie genehmigen können.Hinzufügen eines einzelnen Listeneintrags zu einer anderen Liste

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(); 

Dann bekomme ich meine ganze Abteilung Benutzer, die

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(); 

Danach genehmigen kann ich durch die Liste gehen und wenn es nicht in allApproveUsers existiert Ich versuche es hinzuzufügen.

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; 

Ich habe 9 Artikel in allApproveUsers und nachdem ich die 35 durchlaufen oder so deptApproveUsers Ich habe nur 10 Elemente in der Liste unabhängig 15 Artikel zu haben, die hinzugefügt werden sollen. Wo gehe ich falsch?

Antwort

0

Sie fügen immer allApprovedUsers (die Zahl ist 9) zu einem einzigen deptUser hinzu (deshalb bleibt concatUsers immer 10). Sie können unten probieren:

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

statt

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

Hoffnung, es hilft.

0

Ich mag einige hilfreiche Erweiterungsfunktionen haben, dies zu tun:

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); 

Außerdem gibt es eine existiert Test in LINQ bereits:

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

Warum Sie nicht nur LINQ verwenden, um die Duplikate loswerden?

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

Wo:

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