2017-05-19 5 views
1

リストに重複がないように2つのリストを結合しようとしています。私がまずやることは、承認できるすべてのユーザーをつかむことです。リストアイテムを別のリストに追加する

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; 

IはallApproveUsers 9つのアイテムを持っていると私は35またはそうdeptApproveUsers通過した後に私は関係なく、添加すべき15個の項目を有するリスト10個の項目を有しています。どこが間違っていますか?

答えて

0

allApprovedUsers(カウントは9)を1つのdeptUserに追加します(そのため、concatUsersは常に10のままです)。あなたは以下試すことができます:

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

代わりの

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

希望、それが役立ちます。

0

私はこれを行うためにいくつかの有用な拡張機能を持っているのが好き:あなただけにLINQを使用していないのはなぜ

if (!allApproveUsers.Any(e => e.UserID == deptUser.UserID)) 
     allApproveUsers = allApproveUsers.Append(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でテストを存在があります重複を取り除く?

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

どこ:

private static IQueryable<T> GetUniqueValues(IQueryable<T> sequence) 
{ 
    return from s in sequence 
      select s; 
}  
関連する問題