Vous pourriez faire deux façons avec ceci. L'utilisation LINQPad (valeur inestimable si vous êtes nouveau à LINQ) et une base de données factice, j'ai construit les requêtes suivantes:
Posts.Join(
Post_metas,
post => post.Post_id,
meta => meta.Post_id,
(post, meta) => new { Post = post, Meta = meta }
)
ou
from p in Posts
join pm in Post_metas on p.Post_id equals pm.Post_id
select new { Post = p, Meta = pm }
Dans ce cas particulier, je pense que la syntaxe LINQ est plus propre (Je change entre les deux en fonction de ce qui est le plus facile à lire). La chose que je tiens à souligner cependant est que si vous avez des clés étrangères appropriées dans votre base de données, (entre post et post_meta) alors vous n'avez probablement pas besoin d'une jointure explicite sauf si vous essayez de charger un grand nombre d'enregistrements. Votre exemple semble indiquer que vous essayez de charger un seul article et que ce sont des métadonnées. Si l'on suppose qu'il ya beaucoup de dossiers post_meta pour chaque poste, alors vous pouvez faire ce qui suit:
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
Si vous voulez éviter le problème n + 1, alors vous pouvez explicitement dire LINQ to SQL pour charger tous les associés éléments en une seule fois (bien que ce soit un sujet avancé lorsque vous êtes plus familier avec L2S). L'exemple ci-dessous dit: « Quand vous chargez un Post, charge également tous ses enregistrements associés via la clé étrangère représentée par la propriété 'Post_metas de »:
var dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Post>(p => p.Post_metas);
var dataContext = new MyDataContext();
dataContext.LoadOptions = dataLoadOptions;
var post = Posts.Single(p => p.ID == 1); // Post_metas loaded automagically
Il est possible de faire beaucoup LoadWith
appels sur un ensemble unique de DataLoadOptions
pour le même type, ou de nombreux types différents. Si vous faites cela bien, vous voudrez peut-être envisager de mettre en cache.
ce que vous essayez d'accomplir? – GerManson
Que voulez-vous que la requête fasse dans une phrase? – hunter
Vos sélecteurs de clé sont * way * trop compliqués. Si vous voulez sélectionner par ID, juste x => x.ID est bien. –