2010-06-21 15 views
0

J'ai deux iList de ces objets:Comment mettre en œuvre une clause IN dans LINQ

class ProductionMachineType 
    { 
     string code { get; set; } 
     IEnumerable<string> ProductionToolsLink { get; set; } 
    } 

    class ProductionTools 
    { 
     string code { get; set; } 
    } 

Je cherche une méthode Linq rapide qui me rend capable d'interroger la IList<ProductionMachineType> qui contient au moins un ProductionToolsLink contenu à l'intérieur le ILIst<ProductionTools>.

Dans SQL Je Wite quelque chose comme ceci:

SELECT 
     * 
FROM 
     IList<ProductionMachineType> 
WHERE 
     IList<ProductionMachineType>.ProductionToolsLink IN ILIst<ProductionTools> 

Est-il possible de le faire?

Répondre

2

Cela va faire, mais je ne peux pas garantir l'efficacité comment il est ...

var output = machines.Where(machine => 
    machine.ProductionToolsLink 
    .Any(link => tools.Select(tool => tool.code).Contains(link))); 
+0

Ok c'est la bonne réponse. Les probles efficaces sont connus mais je ne peux pas approcher une cause différente de notre mauvais modèle de domaine. La requête linq est également très compliquée. Donc je pense que je vais utiliser deux foreach pour améliorer la clarté. – AngeloBad

5

méthode Contains peut vous aider:

var names = new string[] { "Alex", "Colin", "Danny", "Diego" }; 

var matches = from person in people 
     where names.Contains(person.Firstname) 
     select person; 
+0

ne fonctionne pas si "noms" est une autre entité, il sort un "EXISTS", pas un "IN" –

Questions connexes