Search code examples
c#linqjoinlambda

Join/Where with LINQ and Lambda


I'm having trouble with a query written in LINQ and Lambda. So far, I'm getting a lot of errors here's my code:

int id = 1;
var query = database.Posts.Join(
    database.Post_Metas,
    post => database.Posts.Where(x => x.ID == id),
    meta => database.Post_Metas.Where(x => x.Post_ID == id),
    (post, meta) => new { Post = post, Meta = meta }
);

I'm not sure if this query is correct.


Solution

  • I find that if you're familiar with SQL syntax, using the LINQ query syntax is much clearer, more natural, and makes it easier to spot errors:

    var id = 1;
    var query =
       from post in database.Posts
       join meta in database.Post_Metas on post.ID equals meta.Post_ID
       where post.ID == id
       select new { Post = post, Meta = meta };
    

    If you're really stuck on using lambdas though, your syntax is quite a bit off. Here's the same query, using the LINQ extension methods:

    var id = 1;
    var query = database.Posts    // your starting point - table in the "from" statement
       .Join(database.Post_Metas, // the source table of the inner join
          post => post.ID,        // Select the primary key (the first part of the "on" clause in an sql "join" statement)
          meta => meta.Post_ID,   // Select the foreign key (the second part of the "on" clause)
          (post, meta) => new { Post = post, Meta = meta }) // selection
       .Where(postAndMeta => postAndMeta.Post.ID == id);    // where statement