Filtrage des listes à l'aide de LINQ
J'ai une liste de Personnes qui sont renvoyées à partir d'une application externe et je suis de la création d'une liste d'exclusion dans mon local de l'application de me donner la possibilité de supprimer manuellement les personnes de la liste.
J'ai une clé composite que j'ai créé, qui est commun aux deux et je veux trouver un moyen efficace de les enlever de ma Liste à l'aide de ma Liste
e.g
class Person
{
prop string compositeKey { get; set; }
}
class Exclusions
{
prop string compositeKey { get; set; }
}
List<Person> people = GetFromDB;
List<Exclusions> exclusions = GetFromOtherDB;
List<Person> filteredResults = People - exclustions using the composite key as a comparer
Je pensais que LINQ a été le moyen idéal de le faire, mais après avoir essayé les jointures, les méthodes d'extension, à l'aide des rendements, etc. Je suis toujours avoir des ennuis.
Si c'était SQL je voudrais utiliser un not in (?,?,?)
requête.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Ont un look à la Sauf méthode, que vous pouvez utiliser comme ceci:
Vous aurez envie d'utiliser la surcharge de travail, je suis lié à, qui permet de spécifier une coutume IEqualityComparer. De cette façon, vous pouvez spécifier la façon dont les éléments match en fonction de votre clé composite. (Si vous avez déjà remplacé égal à Égal, cependant, vous ne devriez pas besoin de la IEqualityComparer.)
Edit: Puisqu'il semble que vous êtes à l'aide de deux différents types de classes, voici un autre moyen qui pourrait être plus simple. En supposant un
List<Person>
appelépersons
et unList<Exclusion>
appeléexclusions
:En d'autres termes: pour choisir les exclusions juste les touches, puis choisissez l'une de personnes tous les objets de la Personne qui ne pas aucun de ces touches.
Je voudrais juste utiliser la méthode FindAll sur la Liste de classe. c'est à dire:
Ne sais pas si la syntaxe correspondent exactement à celles de vos objets, mais je pense que vous voyez où je veux en venir.
Un grand merci pour ce gars.
Je mangaged pour obtenir ce pour une ligne:
Merci encore à tout le monde.
Je ne pouvais pas comprendre comment le faire dans le plus pur MS LINQ, j'ai donc écrit ma propre méthode d'extension pour le faire:
Vous pouvez utiliser le "Sauf" méthode d'extension (voir http://msdn.microsoft.com/en-us/library/bb337804.aspx)
Dans votre code
Je voudrais faire quelque chose comme ça, mais je parie qu'il y est un moyen plus simple. je pense que le sql de linqtosql serait d'utiliser un select de personne Où n'EXISTE PAS(sélectionnez à partir de votre liste d'exclusion)
Ce LINQ ci-dessous va générer le SQL pour une jointure externe gauche, puis prenez tous les résultats qui ne sont pas de trouver une correspondance dans votre liste d'exclusion.
laissez-moi savoir si cela fonctionne!
Adapter la liste des types et des lambdas en conséquence, et vous pouvez filtrer quoi que ce soit.
https://dotnetfiddle.net/6bMCvN