/ / Linq OData «Where» clause sur la liste imbriquée - linq, wcf-data-services, odata, where

Linq OData Clause “Where” sur la liste imbriquée - linq, wcf-data-services, odata, où

Disons que j'ai la requête OData Linq Query suivante (exécutée sur http://odata.netflix.com/v2/Catalog):

Genres.Where(x=>x.Name=="Adventures")
.Select(y=> new
{
Genre = y.Name,
Movie = y.Titles.Select(l=> new
{
l.Name,
l.AverageRating
})
})

Comment pourrais-je changer cette requête pour me donner les lignes où AverageRating était 3?

(REMARQUE: le but de cette question est de savoir comment faire une clause where sur les propriétés d'une sous-liste développée de mon élément de requête de niveau principal. Ma véritable requête n'est même pas par rapport au flux OData Netflix.)

Réponses:

1 pour la réponse № 1

La réponse courte est que ce n'est pas possibleactuellement. Le filtre $ s'applique toujours (et uniquement) à l'ensemble d'entités de niveau supérieur. Il n'existe actuellement aucun moyen de filtrer les ensembles d'entités étendus. Le filtre $ peut atteindre l'intérieur des ensembles d'entités développés, mais le résultat filtrera toujours l'ensemble de niveau supérieur. Dans V2, cela fonctionne pour les propriétés de navigation singleton (l'expression dans $ filter peut les traverser), dans V3, vous pouvez utiliser any / all pour incorporer également les propriétés de navigation de la collection.

La raison pour laquelle cela ne fonctionne pas est que l'ODataLe protocole ne définit pas la syntaxe URI pour les filtres imbriqués. En fait, il ne définit presque aucun opérateur sur les ensembles d'entités étendus, à l'exception de l'expansion elle-même et des projections.