2009-07-06 9 views
1

Je n'ai pas trouvé la réponse parmi les nombreux messages sur Linq, alors je suis ici. Nous avons une application client-serveur, où le côté client n'a absolument aucune connaissance de la couche DAL réelle côté serveur, implémentée incidemment à l'aide de NHibernate. Cela signifie qu'il n'y a aucune référence à NHibernate dans les assemblages côté client, ni aucune abstraction de base de données. Le côté client parle strictement en termes d'entités, qui sont basées sur des objets métier CSLA.Utilisation de Linq Expressions pour découpler le côté client de DAL (côté serveur)

Je voudrais laisser le côté client filtrer les entités affichées. Mon idée est de laisser le côté client construire une expression Linq, la transmettre au côté serveur, récupérer les données correspondant à l'expression en utilisant Linq à NHibernate et le renvoyer au client. J'ai téléchargé et compilé Linq à NHibernate, mais malheureusement, je ne trouve pas d'exemple découplant les expressions Linq (côté client) de l'instance NHibernateContext respective (côté serveur). Tous les exemples semblent être comme

from c in db.Customers where ... 

dire à la fois le contexte (db.Customers) et l'expression (où ...) dans une déclaration.

Est-il possible de les découpler? Merci.

Répondre

0

Cela se révèle être assez facile - from c in db.Customers where linq-exp select c est équivalent à db.Customers.Where(linq-exp).

J'ai en fait eu besoin de cela dans le cadre d'un problème plus général - en spécifiant une expression linq du côté client et l'utiliser pour récupérer des données côté serveur. Mon article here le décrit plus en détail.

0

Jetez un oeil à cet article. Vous pouvez utiliser ce concept pour transmettre des paramètres de requête, puis générer dynamiquement votre requête.

Linq query built in foreach loop always takes parameter value from last iteration

+0

Bonjour Andrew. J'ai visité le lien. Mais tous les échantillons lient le contexte et l'expression ensemble dans une instruction linq. J'ai besoin de quelque chose comme ceci: var expr = GetExpressionFromUser(); // <- côté client var results = FetchByExpression (expr); // <- côté serveur – mark

Questions connexes