2009-04-25 4 views
5

Comment utiliser LINQ sur des données interrogeables et non-interrogeables?LINQ Joindre pour rechercher des éléments qui ne se trouvent PAS dans une liste

Avec le code suivant, je souhaite obtenir une liste d'utilisateurs non sélectionnés, c'est-à-dire tous les utilisateurs de tous les utilisateurs qui ne sont pas sélectionnés.

public IQueryable<CompanyUser> FindAllUsersNotAssignedTothisCompany(int companyID) 
{ 
    var allUsers = Membership.GetAllUsers(); 
    var selected = db.CompanyUsers.Where(c => c.CompanyID == companyID); 
    ...? 
} 

Je veux effectivement une liste de numéro d'identité utilisateur et les noms appropriés pour une utilisation dans un DropDownList (ASP.NET MVC)

Répondre

18

En supposant que les deux allUsers et selected sont du même type, vous pouvez le faire en utilisant Except

public IQueryable<CompanyUser> FindAllUsersNotAssignedTothisCompany(int companyID) 
{ 
    var allUsers = Membership.GetAllUsers(); 
    var selected = db.CompanyUsers.Where(c => c.CompanyID == companyID); 
    return allUsers.Except(selected); 
} 

Toutefois, si db.CompanyUsers a déjà tous les utilisateurs et tout ce dont vous avez besoin est de récupérer les utilisateurs qui ne sont pas COMPANYID en quête ion juste:

return db.CompanyUsers.Where(c => c.CompanyID != companyID); 
0

Essayez cela en une ligne:

db.CompanyUsers.Where(c => !allUsers.Any(d=> d.CompanyID == a.companyID))).ToList(); 
Questions connexes