Linq to SQL lambda rejoindre
De la difficulté avec cela, j'ai essayé à la suite de plusieurs exemples, mais je suis tout simplement pas l'obtenir. Il a le sens parfait à l'aide de la non-lambda moyen, mais comment dois-je faire une jointure à l'aide des expressions lambda?
var myCats = GetAllCats();
var myHouses = GetAllHouses();
//pseudosql: select * from a inner join b on a.id = b.id
J'ai essayé ceci:
var fullData = myCats.Join(myHouses, a => a.id, b => b.id, (a, b) => a);
qui j'ai eu par le biais de la recherche à d'autres exemples, mais fullData est de type IEnumerable<Cat>
donc je ne peux pas tirer toutes les propriétés de Maisons.
OriginalL'auteur NibblyPig | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
Accès via
fullData.First().Cat...
oufullData.First().House...
.Je vous remercie pour l'aide de variables avec plus de contexte que
foo
etbar
.changé le lambda paramètres, il est donc plus lisible.
OriginalL'auteur Femaref
Le problème, c'est que le résultat de votre rejoignez - le dernier paramètre de la méthode Join - est un
Cat
, c'est pourquoifullData
est de typeIEnumerable<Cat>
. Si vous souhaitez accéder à la fois, de retour d'un type anonyme:OriginalL'auteur Daniel Hilgarth
C'est parce que l'argument final
(a, b) => a
moyen de la carte le résultat de retour pour les chats, c'est a dire c'est(cat, house) => cat
Vous pouvez retourner un objet temporaire avec la paire par exemple
OriginalL'auteur Rup
Vous avez besoin de définir simplement ce que vous voulez sélectionner d'eux.
Vous pouvez changer votre dernier:
qui fera
fullData
un IQueryable d'un type anonyme qui ressemble à:L'équivalent en LINQy format:
Vous pouvez également spécifier exactement ce que vous voulez sélectionner, pour éviter le gaspillage:
OriginalL'auteur Jon Hanna