SQL et Self connexes Nous avons le modèle de test suivant dans le fichier dbml:LINQ au tableau
Model http://www.freeimagehosting.net/uploads/a86582498a.gif
Pour le cas de test il y a 4 enregistrements de la table, 1 parents, 3 enfants. Nous recherchons les frères et soeurs d'un enregistrement spécifique, y compris le dossier spécifique.
using (var db = new TestDataContext())
{
var query =
from f in db.Foos
where f.Name == "Two"
select f.Foo1.Foos; // get the record's parent's children
var foos = query.SelectMany(f => f); // project the EntitySet
Assert.AreEqual(3, foos.Count()); // passes
}
Cela renvoie les éléments corrects avec l'instruction SQL suivante:
SELECT [t2].[FooId],
[t2].[ParentFooId],
[t2].[Name]
FROM [dbo].[Foos] AS [t0]
INNER JOIN [dbo].[Foos] AS [t1] ON [t1].[FooId] = [t0].[ParentFooId]
CROSS JOIN [dbo].[Foos] AS [t2]
WHERE ([t0].[Name] = @p0)
AND ([t2].[ParentFooId] = [t1].[FooId])
Nous nous interrogeons sur la CROSS JOIN, c'est apparemment le résultat de la SelectMany?
Y a-t-il une autre façon d'aborder cela afin de ne pas avoir le CROSS JOIN?
Donc cela va quitter le type de jointure à SQL Server depuis un n'est pas spécifié? – blu
Oui. Par défaut, c'est une jointure interne. –
J'ai cru comprendre que ',' laisserait la détermination de la jointure à SQL Server; il peut s'agir d'une jointure interne ou d'une jointure croisée. Si ce n'est pas une référence à cette mise en œuvre serait génial. – blu