Maison > développement back-end > C++ > Comment effectuer correctement les jointures Linq et Lambda et où les clauses?

Comment effectuer correctement les jointures Linq et Lambda et où les clauses?

Linda Hamilton
Libérer: 2025-01-28 16:37:17
original
539 Les gens l'ont consulté

How to Correctly Perform LINQ and Lambda Joins and Where Clauses?

Dépannage de Linq et Lambda JOIN / WHERE CLAUSE ERRORS

Cet exemple démontre des erreurs communes lors de l'utilisation d'expressions Linq et Lambda pour les jointures et Where clauses. Analysons l'approche défectueuse, puis présentons les solutions correctes.

Incorrect linq / lambda jointer tentative:

Le code d'extrait de code suivant illustre une implémentation incorrecte:

<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>
Copier après la connexion

L'erreur réside dans les sélecteurs post et meta dans la méthode Join. Au lieu de sélectionner une seule valeur (l'ID) pour se joindre, il utilise des collections Where Clauses, renvoyant IQueryable. Join s'attend à des valeurs uniques pour la correspondance des clés.

Approches correctes:

1. Utilisation de la syntaxe de requête LINQ (plus lisible):

C'est souvent la façon la plus claire d'exprimer les jointures:

<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>
Copier après la connexion

Cette syntaxe reflète directement l'opération de jointure de base de données relationnelle, ce qui facilite la compréhension.

2. Utilisation de la syntaxe de lambda (plus concise):

Pour ceux qui préfèrent les expressions de lambda, l'implémentation correcte est la suivante:

<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>
Copier après la connexion

Cette version utilise correctement post.ID et meta.Post_ID comme clés de jointure. La clause Where est appliquée après la jointure, filtrant les résultats en fonction du post.ID. Ceci est crucial pour le filtrage correct.

En comprenant l'utilisation correcte des clés de jointure et le placement approprié de la clause Where, les développeurs peuvent éviter les erreurs courantes et écrire des requêtes LINQ efficaces et précises.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal