Maison > développement back-end > C++ > Comment puis-je rejoindre efficacement deux tables à l'aide d'expressions Linq et Lambda?

Comment puis-je rejoindre efficacement deux tables à l'aide d'expressions Linq et Lambda?

DDD
Libérer: 2025-01-28 16:26:12
original
689 Les gens l'ont consulté

How Can I Efficiently Join Two Tables Using LINQ and Lambda Expressions?

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

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal