Podrías ir de dos maneras con esto. Usando LINQPad (muy útil si usted es nuevo en LINQ) y una base de datos ficticia, he construido las siguientes consultas:
Posts.Join(
Post_metas,
post => post.Post_id,
meta => meta.Post_id,
(post, meta) => new { Post = post, Meta = meta }
)
o
from p in Posts
join pm in Post_metas on p.Post_id equals pm.Post_id
select new { Post = p, Meta = pm }
En este caso particular, creo que la sintaxis de LINQ es más limpio (Cambio entre los dos dependiendo de cuál es más fácil de leer).
Lo que me gustaría señalar es que si tienes claves externas apropiadas en tu base de datos (entre post y post_meta) entonces probablemente no necesites una unión explícita a menos que intentes cargar una gran cantidad de registros Su ejemplo parece indicar que está intentando cargar una sola publicación y sus metadatos. Suponiendo que hay muchos registros post_meta para cada puesto, entonces usted podría hacer lo siguiente:
var post = Posts.Single(p => p.ID == 1);
var metas = post.Post_metas.ToList();
Si se quiere evitar el n + 1 problema, entonces se puede decir de manera explícita LINQ a SQL para cargar todos los relacionados artículos de una vez (aunque este puede ser un tema avanzado para cuando esté más familiarizado con L2S). El ejemplo de abajo dice "cuando se carga un Post, también cargar todos sus registros asociados a ella a través de la clave externa representada por la propiedad 'Post_metas'":
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
Es posible hacer muchas LoadWith
llamadas en una conjunto único de DataLoadOptions
para el mismo tipo, o muchos tipos diferentes. Sin embargo, si haces esto mucho, tal vez quieras considerar el almacenamiento en caché.
lo que estás tratando de lograr? – GerManson
¿Qué quieres que haga la consulta en una oración? – hunter
Sus selectores de teclas son * forma * demasiado complicados. Si desea seleccionar por id, solo x => x.ID está bien. –