Justin a bien montré l'expansion dans le cas où la jointure est suivi par un select
. Si vous avez quelque chose d'autre, il devient de plus en plus difficile à cause transparent identificateurs - le mécanisme le compilateur C# utilise pour propager le champ d'application des deux moitiés de la rejoindre.
Donc pour modifier Justin exemple légèrement:
var result = from sc in enumerableOfSomeClass
join soc in enumerableOfSomeOtherClass
on sc.Property1 equals soc.Property2
where sc.X + sc.Y == 10
select new { SomeClass = sc, SomeOtherClass = soc }
serait transformé en quelque chose comme ceci:
var result = enumerableOfSomeClass
.Join(enumerableOfSomeOtherClass,
sc => sc.Property1,
soc => soc.Property2,
(sc, soc) => new { sc, soc })
.Where(z => z.sc.X + z.sc.Y == 10)
.Select(z => new { SomeClass = z.sc, SomeOtherClass = z.soc });
L' z
voici les transparents de l'identificateur - mais parce que c'est la transparence, vous ne pouvez pas le voir dans la requête d'origine :)