2009-04-27 6 views
2

Merci à l'aide de this.Cette expression lambda est-elle possible?

essayé, sans succès ..

Je sais

from f in list 
where f.bar == someVar 
select f 

peut être écrit comme

list.Where(f => f.bar == someVar); 

une expression similaire peut être créé à partir

from f in foo 
from b in f.bar 
where b.something == someVar 
select f; 

?

Editer: Désolé, j'ai oublié f.bar dans le deuxième exemple est une liste d'objets.

+0

Pouvez-vous expliquer pourquoi la réponse de Marc Gravell n'a pas fonctionné? Ça devrait marcher. Aussi, essayez d'y répondre au lieu de poser deux fois la même question. – tofi9

+1

Ce message est différent de l'autre. Ne le votez pas. –

+1

Ce n'est pas un doublon. 'select b' ->' select f' fera la différence. –

Répondre

4

Certainement. La syntaxe de requête est juste un sucre syntaxique. Il sera traduit en syntaxe lambda sous-jacente par le compilateur, donc chaque expression de requête a une représentation basée sur lambda équivalente.

Ceci est probablement ce que vous avez besoin (ce n'est pas strictement équivalente à celle mais fonctionne quand vous avez juste un bar correspondant à la requête dans chaque foo):

var result = foo.Where(f => f.bar.Any(b => b.something == someVar)); 

La version strictement équivalente est:

var result = foo.SelectMany(f => f.bar, (f, b) => new { F = f, B = b }) 
       .Where(x => x.b.something == someVar) 
       .Select(x => x.f); 
Questions connexes