2010-08-11 14 views
1

J'ai un List<my_Custom_Class> and List<string>. Ma classe personnalisée comporte plusieurs éléments dont un est un numéro DCN et list<string> ne contient que le numéro DCN. Donc, je dois vérifier le List<Custom_Class> contains any dcn from List<string>.Trouver la différence entre la liste

Par exemple, supposons List1 = List<Custom_Class> and List2 = List<String>. Si List1 a 2000 éléments et que list2 a 40000 éléments sur lesquels 600 éléments de List1 existe dans List2. Donc, dans ce cas, j'ai besoin de 1400 comme ma liste de sortie en tant que list1. Alors, quelle serait l'expression. Un autre cas est également présent puisque List1 contient divers éléments, d'autres valeurs peuvent être différentes mais le DCN doit être identique. Que je dois vérifier seulement la similitude de DCN.

Voici ma classe. Maintenant, à partir datatable je suis d'ajouter à un DCN List<String> Dcns;

public class DocumentInfo 
    { 

     public string ImageType { get; set; } 
     public string FileFullPath { get; set; } 
     public string BatchName { get; set; } 
     public string FileName { get; set; } 
     public string DCN { get; set; } 
     public string MemberID { get; set; } 
     public string NPI { get; set; } 
     public string TaxID { get; set; } 
     public string Client { get { return DCN.Substring(0, 2); } } 
    } 

Voici donc dans mon cas je 493K à DCNS List<string>Dcns and 110K DCNS in List<DocumentInfo>. J'ai besoin de filtrer les enregistrements en double de 110K DCN. Ou peut dire soustraire les deux listes. Je dois supprimer tous les dcns en double qui existent dans la liste. Dire Si les enregistrements 70K sont en double, alors ma liste résultante d'informations sur le document sera de Liste de repos 40K. Distinct/Except ne fonctionne pas. LINQ/Lambda Exp sera préférable.

J'ai besoin d'urgence et dès que possible.

Merci dans adv.

+0

Vous souciez-vous de la performance? –

+0

En ce moment je n'ai pas de tels problèmes, car il s'agit d'un processus unique de téléchargement ayant des dcns uniques, mais pourrait être plus tard .. Combien de temps pensez-vous, il faudra pour traiter 500K avec 100K. –

Répondre

4
var dcnSet = new HashSet<string>(Dcns); 
docInfoList.RemoveAll(el => dcnSet.Contains(el.DCN)); 

Le HashSet est pas strictement nécessaire, mais il fait la différence entre O (m * n) et O (m + n), où est m et n sont le nombre d'éléments dans chaque liste.

EDIT:

RemoveAll supprime les éléments de la List en place existante. Il ne crée pas de nouveau List. Il renvoie le nombre d'éléments supprimés, mais si vous ne vous en souciez pas, vous pouvez simplement ignorer la valeur de retour.

+0

Qu'est-ce que c'est ici? –

+0

Son retournant int et j'ai besoin de la liste .. s'il vous plaît aider –

+1

'el' est un paramètre pour l'expression lambda, en maintenant l'élément en cours. Ce lambda est un prédicat (fonction booléenne) qui sera appelé pour chaque élément de 'docInfoList'. C'est vrai, l'élément sera supprimé. –

Questions connexes