1. ホーム
  2. c#

[解決済み] LINQとLambdaでJoin/Whereを実現する

2022-03-18 13:01:11

質問

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

LINQを使うのは初めてなので、このクエリが正しいかどうかわからないのですが。

どのように解決するのですか?

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