2009-10-14 6 views
0

Je suis en train d'exécuter une requête similaire àEntitySet Interrogation

var results = MyItem.MyEntitySet.Where(x => x.PropertyB == 0) 

MyEntitySet a une association, PropertyA, avec MyItem.

Idéalement, la requête SQL sous-jacente devrait être

SELECT .. FROM .. WHERE ([t0].[PropertyA] = @p0) AND ([t0].[PropertyB ] = @p1) 

depuis PropertyA et PropertyB sont les deux clés primaires de la table, je suis l'interrogation.

Mais mes traces semblent indiquer que le programme interroge d'abord PropertyA pour retourner MyEntitySet, puis interroge avec PropertyB pour retourner var results.

Y at-il de toute façon que je puisse forcer Linq à interroger avec ces deux conditions dans une instruction SQL unique?

Répondre

0

Peut-être, peut-être pas. Le SQL généré correspond à la façon dont vous écrivez la requête LINQ, de sorte que le SQL généré n'est pas une surprise. Si vous avez commencé avec l'entité représentée par "MyEntitySet" alors, peut-être, le SQL généré changerait.

Il n'est pas immédiatement clair si vous utilisez LINQ to SQL ou Entity Framework. LINQ to SQL représente les relations un-à-plusieurs en tant que «ensemble d'entités», tandis que Entity Framework traite les relations comme des objets de première classe, de sorte qu'une relation un-à-plusieurs est un ensemble d'objets relationnels avec des entités connexes. simplement un ensemble d'entités. Cela affecte le SQL généré.

Deux autres pensées ...

Si vous voulez que beaucoup de contrôle sur le SQL généré probablement, vous ne serez pas heureux avec LINQ. Cela ne génère pas toujours un SQL optimal (bien que cela puisse parfois vous surprendre). D'un autre côté, l'un des principaux avantages de LINQ est que vous commencez à écrire du code qui exprime les relations réelles dans vos données. La chute du classique ADO.NET est que vous écrivez du code sur la manipulation de SQL et le traitement des collections DataSet et DataTable. LINQ est un code infiniment plus propre, plus sûr, plus robuste et plus facile à écrire. Tout est un compromis. Deuxièmement, la génération de la requête devrait s'améliorer au fil du temps (en particulier dans Entity Framework).