Avatar ·

Comment obtenir en C# avec LINQ les éléments d'une liste qui ne sont pas dans une autre liste ?

Bonjour à tous ! Je suis un développeur C# débutant et j'ai rencontré un problème en travaillant avec des collections. J'ai deux listes d'objets du même type. Supposons que j'ai une classe Product avec les champs Id et Name. La première liste (listA) contient tous les produits de la base de données, et la seconde (listB) est la liste des produits que l'utilisateur a déjà sélectionnés pour la commande. J'ai besoin d'obtenir une troisième liste (listC) qui contiendra uniquement les produits de listA qui ne sont pas dans listB. J'ai essayé d'utiliser une boucle foreach et de vérifier avec Contains, mais cela semble lourd et peu élégant. De plus, lorsque les listes sont grandes, ce code fonctionne lentement. J'ai entendu dire que LINQ permet de faire ce genre de choses de manière élégante et rapide. Pouvez-vous me dire comment écrire correctement une requête pour obtenir les éléments absents de la deuxième liste ? Il est important que la comparaison se fasse par Id, car Name peut se répéter. Exemple de ma structure de données :
List<Product> listA = new List<Product>
{
    new Product { Id = 1, Name = "Молоко" },
    new Product { Id = 2, Name = "Хлеб" },
    new Product { Id = 3, Name = "Сыр" }
};