一尘不染

与LINQ和Lambda一起/在哪里

c#

我遇到了用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的新手,所以不确定此查询是否正确。


阅读 222

收藏
2020-05-19

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

但是,如果您真的很喜欢使用lambda,那么您的语法就会有些偏离。这是使用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
2020-05-19