Masterring linq and lambda joint: un guide pratique
Un défi commun pour les développeurs travaillant avec Linq et Lambda Expressions rejoint efficacement deux tables. Cela conduit souvent à des erreurs. Examinons un exemple problématique et explorons des solutions efficaces.
La requête LINQ suivante, tout en tentant une jointure, contient des erreurs:
<code class="language-csharp">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 } );</code>
Le problème réside dans les sélecteurs post
et meta
dans la méthode Join
. Ces sélecteurs doivent référencer directement les clés primaires et étrangères, et non exécuter des requêtes supplémentaires.
Solution 1: Syntaxe de requête LINQ (plus lisible)
Pour améliorer la clarté, en particulier pour les débutants, la syntaxe de requête LINQ offre une approche plus intuitive:
<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>
Cette approche montre clairement la condition de jointure (post.ID equals meta.Post_ID
) et le filtrage (where post.ID == id
).
Solution 2: Expressions lambda (méthodes d'extension)
Si vous préférez la concision des expressions de lambda, voici la version corrigée en utilisant des méthodes d'extension:
<code class="language-csharp">var id = 1; var query = database.Posts // Start with the "from" table .Join(database.Post_Metas, // Join with the "join" table post => post.ID, // Primary key for "from" table meta => meta.Post_ID, // Foreign key for "join" table (post, meta) => new { Post = post, Meta = meta }) // Selection .Where(postAndMeta => postAndMeta.Post.ID == id); // "Where" clause</code>
Ce code raffiné utilise directement les propriétés ID
et Post_ID
pour la jointure, ce qui le rend efficace et sans erreur. La clause Where
filtre ensuite les résultats en fonction de la id
souhaitée. Cette approche est plus efficace car elle effectue le filtrage après la jointure, réduisant les opérations de base de données inutiles.
En comprenant ces méthodes améliorées, vous pouvez écrire des requêtes LINQ plus propres, plus efficaces et sans erreur pour rejoindre des tables en utilisant à la fois des expressions de syntaxe de requête et de lambda.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!