mercredi 13 juin 2012

Filtrer par une NavigationProperty "many to many" avec un EntityDatasource

Amateurs d'EntityDataSource, voici un truc pour VOUS !

Dans une relation de plusieurs à plusieurs, quand on veut faire un "select * from x inner join y where y.id = @id" il nous dit souvent :

"To extract a property of a collection element, use a subquery to iterate over the collection."

Pour palier à ce petit inconvénient il suffit de mettre

Where="EXISTS(SELECT Produits.ProduitId FROM it.Produits WHERE Produits.ProduitId = @id)"

Comme ça on utilise une sous requête comme il faut !
mais on n'a pas plus accès à la propriété à la multiplicity = * (many)...

Joyeux Codage !

PS. De plus, en VB ! Une belle manière d'accéder à sa NavigationProperty :
Dim listeDeProduitBois = CType((From p In db.Produits
From b In p.Bois1
Where b.BoisId = x.BoisId
Select p), ObjectQuery(Of Produits)).Include("Descriptions")
"Imports System.Data.Objects" pour le "ObjectQuery".

PS2. Un autre beau where (dans un beau tutorial): @PersonID IN (SELECT VALUE instructor.PersonID FROM it.People AS instructor)


Aucun commentaire:

Publier un commentaire