2017-05-19 152 views
1

我試圖將兩個列表組合在一起,以便列表中沒有重複項。我要做的第一件事就是抓住所有可以批准的用戶。將單個列表項添加到另一個列表

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項應增加的。我哪裏錯了?

回答

0

您總是將allApprovedUsers(計數爲9)添加到單個deptUser(這就是爲什麼concatUsers始終保持爲10)。你可以試試下面:

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

,而不是

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

希望,它幫助。

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

你爲什麼不只是使用LINQ擺脫重複?

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

其中:

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