54 votes

Supprimer des éléments d'une liste d'une autre liste avec des critères

j'ai une liste d'écrivains.

 public class Writers{   
    long WriterID { get;set; }
}

J'ai aussi deux listes de type Article.

 public class Article{
    long ArticleID { get; set; }
    long WriterID { get; set; }
    //and others    
}

donc le code que j'ai est :

 List<Article> ArticleList = GetList(1);
List<Article> AnotherArticleList = AnotherList(2);
List<Writers> listWriters = GetAllForbiddenWriters();

Je souhaite supprimer ces enregistrements de ArticleList , AnotherArticleListWriterID correspond à listWriters WriterID . Comment faire cela dans LINQ ?

49voto

bitxwise Points 2246
articlesList.RemoveAll(a => listWriters.Exists(w => w.WriterID == a.WriterID));
anotherArticlesList.RemoveAll(a => listWriters.Exists(w => w.WriterID == a.WriterID));

2voto

bestinamir Points 163

Vous pouvez utiliser Sauf :

 List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
List<car> result = list2.Except(list1).ToList();

1voto

Mehdi LAMRANI Points 3961

Je ne vois pas vraiment quelle est la difficulté que vous rencontrez...

Pourquoi ne filtrez-vous pas/supprimez-vous simplement les données de vos listes à l'aide d'une simple boucle for ? (Notez qu'une boucle foreach ne fonctionnera certainement PAS si vous itérez lors de l'édition/modification de l'objet itéré)

 for (int i = ArticleList.Count -1; i >= 0; i--)
{
    for (int j = 0; j < listWriters.Count; j++)
    {
        if (ArticleList[i].WriterId == listWriters[j].WriterID )
            ArticleList.RemoveAt(i);
    }            
}

L'astuce de l'itération arrière résout le paradigme "supprimer des éléments lors de l'itération".

-1voto

danijels Points 1652

Juste un conseil de conception, votre classe doit s'appeler Writer (forme singulière), et non Writers (pluriel). Chaque élément de votre liste représente un seul écrivain, n'est-ce pas ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X