LINQ les articles de retour dans une Liste qui correspond à des Noms (string) dans une autre liste
J'ai 2 listes. 1 est une collection de produits. Et l'autre est une collection de produits dans un magasin.
J'ai besoin d'être en mesure de revenir toutes les shopProducts si le match noms de tous les Noms dans les produits.
J'ai de cela, mais il ne semble pas fonctionner. Des idées?
var products = shopProducts.Where(p => p.Name.Any(listOfProducts.
Select(l => l.Name).ToList())).ToList();
J'ai besoin de dire de me donner tous les shopproducts où le nom existe dans l'autre liste.
- Merci à tous pour il les commentaires! Je travaille maintenant... Merci encore.. Réponse acceptée.
Vous devez vous connecter pour publier un commentaire.
Pour LINQ-to-Objets, si
listOfProducts
contient de nombreux éléments, puis vous pourrait obtenir de meilleures performances si vous créez unHashSet<T>
contenant tous les noms et utilisez-la dans votre requête.HashSet<T>
a O(1) recherche de la performance par rapport à O(n) pour un arbitraireIEnumerable<T>
.Pour LINQ-to-SQL, je voudrais attendre (espérer?) que le fournisseur pourrait optimiser le SQL généré automatiquement sans avoir besoin d'un manuel d'optimisation de la requête.
Vous pouvez utiliser une jointure, par exemple:
Une meilleure guide sur la jointure est ici.
Vous pouvez créer une
IEqualityComparer<T>
qui dit que les produits avec un nom sont égaux.Ensuite, vous pouvez l'utiliser dans le
Intersect
méthode d'extension.Essayez s'il vous plaît ce