J'ai été aux prises avec la même question, et se rendit compte qu'une question bien formé est un problème résolu. IQueryable sert essentiellement à filtrer la requête avant de l'envoyer à votre appel de base de données. Ainsi, au lieu d'obtenir 1000 enregistrements et de n'en filtrer que 10, vous obtenez ces 10 premiers éléments. Ce filtrage appartient à votre couche de service, mais si vous créez une API, je suppose que vous la mappez avec les paramètres AND/OR de votre URL.
http: // {hôte}/{entité}/q? Name = john & age = 21.
Alors vous vous retrouvez avec quelque chose comme ceci:
Filter:Column1=Value1 > http://{host}/{entity}q?column1=value1 > SELECT *
FROM Entity
WHERE Column1=Value1
MVC > WCF > DB
Vous pouvez trouver un très bon exemple [here]
Enfin, depuis votre charge utile de la WCF sera très probablement un JSON, vous peut (et devrait) ensuite les désérialiser dans vos modèles de domaine à l'intérieur d'une collection. C'est jusqu'à ce moment où la pagination devrait se produire, donc je recommanderais une mise en cache WCF (et depuis son HTTP, c'est vraiment simple). Vous utiliserez toujours LINQ côté WebApp, sans clause LINQ "WHERE" (à moins que vous ne souhaitiez créer dynamiquement l'URL exprimée ci-dessus?)
Pour une requête OU complexe, vous devez vous retrouver avec plusieurs WCF requêtes (1 par "ET"), puis les concaténer tous ensemble
Pour Silverlight, vous pouvez utiliser les services WCF RIA – RichardOD