>故障排除linq和lambda join/WHERE子句错误
>此示例在使用linq和lambda表达式进行JONINS和Where
>子句时演示了常见错误。 让我们分析有缺陷的方法,然后提出正确的解决方案。
不正确的linq/lambda Join尝试:
<code class="language-csharp">int id = 1; var query = database.Posts.Join( database.Post_Metas, post => database.Posts.Where(x => x.ID == id), // Incorrect: Should select a single value, not an IQueryable meta => database.Post_Metas.Where(x => x.Post_ID == id), // Incorrect: Should select a single value, not an IQueryable (post, meta) => new { Post = post, Meta = meta } );</code>
和post
方法中的选择中。 它没有选择要加入的单个值(ID),而是使用meta
子句,返回Join
collections。 Where
期望密钥匹配的单个值。IQueryable
Join
1。使用linq查询语法(更可读):
> 这通常是表达连接的更清晰的方式:
此语法直接镜像关系数据库加入操作,从而更易于理解。
<code class="language-csharp">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 };</code>
对于那些喜欢lambda表达式的人,正确的实现如下:>
此版本正确使用和
作为联接键。<code class="language-csharp">var id = 1; var query = database.Posts .Join(database.Post_Metas, post => post.ID, // Correct: Selects the ID for joining meta => meta.Post_ID, // Correct: Selects the Post_ID for joining (post, meta) => new { Post = post, Meta = meta }) .Where(postAndMeta => postAndMeta.Post.ID == id); // Filters after the join</code>
>之后应用post.ID
>,基于meta.Post_ID
>过滤结果。 这对于正确的过滤至关重要。Where
>
通过了解连接密钥的正确用法和适当的放置>子句,开发人员可以避免常见错误并编写有效且准确的LINQ查询。
以上是如何正确执行LINQ和LAMBDA加入以及子句的位置?的详细内容。更多信息请关注PHP中文网其他相关文章!