2009-09-02 8 views
0

Est-il une différence entre ces deux déclarations LINQ:Différence entre le LINQ rejoindre et sous de

var query = from a in entities.A 
      where a.Name == "Something" 
      from b in entities.B 
      where a.Id == b.Id 
      select b; 

var query = from a in entities.A 
      join b in entities.B on a.Id equals b.Id     
      where a.Name == "Something" 
      select b; 

les deux instructions font une jointure interne?

Comment puis-je générer l'instruction SQL générée à partir d'Entity Framework?

+0

Est-ce == ou = pour l'égalité? – recursive

+0

votre droite, petite faute de frappe. –

Répondre

1

Vous pouvez obtenir, et de comparer le SQL pour, ces requêtes:

((ObjectQuery)query).ToTraceString(); 

Le SQL peut être (subtilement) produit différent selon la façon dont EF interprète ces requêtes. FYI- Il n'est pas nécessaire d'inclure des jointures lors de l'interrogation d'entités connexes.

1

Logiquement, ces deux instructions font la même chose. Si elles sont calculées différemment par le cadre, je ne serais pas impressionné.

0

Jetez un coup d'œil au profileur sql. Vous pourriez obtenir votre réponse.

3

Cela ne répond pas précisément à votre question, mais il est presque toujours incorrect d'utiliser la jointure dans LINQ to Entities. Les deux requêtes sont, à mon avis, incorrectes. Qu'est-ce que vous voulez vraiment faire dans ce cas est:

var query = from a in entities.A 
      where a.Name == "Something" 
      from b in a.Bs // where Bs is the name of the relationship to B on A, 
      select b;  // whatever it's called 

Vous avez déjà la spécification de la relation codée dans votre base de données clés étrangères et votre modèle d'entité. Ne le dupliquez pas dans vos requêtes.

Questions connexes