2011-04-27 6 views
1

J'ai donc ce modèle de base de données:WCF Data Service: Beaucoup à plusieurs requêtes

Student<->StudentClasses<->Classes 

où 1 étudiant est lié à de nombreux StudentClasses et une classe est liée à de nombreux StudentClasses.

Comment écrire une requête LINQ pour obtenir toutes les classes liées à l'élève avec l'ID 1?

la requête suivante déclenche une exception ("Ne peut spécifier les options de requête (orderby, où, prendre, sauter) après la navigation dernière."):

     var qry = from sc in service.StudentClasses 
         where sc.StudentId == 1 
         from c in service.Classes 
         where c.ClassId == sc.StudentId 
         select c; 
+1

Ce problème simliar ici: http://stackoverflow.com/questions/5746992/linq-query-error/5747842#5747842 LINQ ne supporte pas ce que vous essayez de faire. Vous devez donc créer plusieurs requêtes, ou développer et retirer plus que ce dont vous avez besoin. – Nix

+0

utilisez-vous linq à sql? ou un autre ORM? – TimC

+1

Il utilise LINQ pour ODATA/reste. – Nix

Répondre

0

Cela fonctionnerait, mais il se bloque si vous l'ID DNE.

var qry = service.StudentClasses 
       .Expand("Classes") 
       .Where(x=>x.StudentId==1) 
       .First() 
       .Classes.Select(t=>t); 
+0

Existe-t-il une meilleure façon d'exposer votre base de données que d'utiliser WCF Data Services? – Attilah

+0

Cela dépend, si vous faites des choses de client léger simples, et n'ont aucune logique métier, DataServices est la voie à suivre, si vous allez faire des requêtes complexes, créez des requêtes personnalisées. Je n'aime pas l'API côté client pour les services de données et je n'aime pas donner aux clients la possibilité d'interroger mes données/modifier mes données de la façon qu'ils choisissent. Par conséquent, j'ai tendance à contrôler la façon dont les gens accèdent à mes données via les services Web et les couches d'accès aux données. – Nix

Questions connexes