8
votes

LINQ Obtenir une liste d'une autre liste

J'ai deux collections: l'un est des éléments et un autre est actifItems

la seule intersection entre ces deux collection est le nom

Je souhaite une liste avec Linq d'éléments où les noms d'éléments sont dans les actifs. Avec ce nom

J'ai écrit ce code est une meilleure idée: xxx


0 commentaires

4 Réponses :


14
votes

Je créerais probablement un ensemble de noms à partir de ActiveItems CODE>, puis utilisez-le:

var query = from item in items
            join activeItem in activeItems 
                on item.Name equals activeItem.Name
                into g
            where g.Any()
            select item;


3 commentaires

Non je ne veux pas de propriétés d'une autre collection


Solutions 2 et 3 utilisera-t-elle des hashsets en interne sans Activenames en être un?


@Magnus: Oui ... Je viens de trouver la première version est plus claire quand vous n'avez pas vraiment besoin des jointures :)



7
votes
Items.where(i => ActiveItems.Any(a => i.Name == a.Name))

0 commentaires

0
votes
var results = from i1 in collection1.Items
              join i2 in collection2.ActiveItems on i1.Name equals i2.Name
              select i2.Name;

0 commentaires

0
votes

Utilisation d'une jointure:

from item in Items
join active in ActiveItems on item.Name equals active.Name
select item


1 commentaires

La jointure devrait être ... sur item.name est égal à Active.name. La séquence est importante