LINQとLambdaを使ったJoin/Where 質問する

LINQとLambdaを使ったJoin/Where 質問する

LINQ と Lambda で記述されたクエリで問題が発生しています。これまでのところ、多くのエラーが発生しています。コードは次のとおりです。

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 }
);

このクエリが正しいかどうかわかりません。

ベストアンサー1

SQL 構文に精通している場合は、LINQ クエリ構文を使用する方がはるかに明確で自然であり、エラーを見つけやすくなります。

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 };

ただし、ラムダの使用にこだわる場合は、構文がかなり間違っています。以下は、LINQ 拡張メソッドを使用した同じクエリです。

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

おすすめ記事