Verwenden von LINQ -Ausdrücken, um die Client -Seite von DAL zu entkoppeln (die Server -Seite ist)

StackOverflow https://stackoverflow.com/questions/1085400

Frage

Ich konnte die Antwort unter den vielen Beiträgen auf Linq nicht finden, also bin ich hier. Wir haben eine Client-Server-Anwendung, bei der die Client-Seite absolut keine Kenntnis des tatsächlichen DAL auf der Serverseite hat, das übrigens mit NHiberNate implementiert wird. Das heißt, es gibt keine Verweise auf NHibernate von den Client -Seitenbaugruppen sowie keine Datenbankabstraktion. Die Kundenseite spricht ausschließlich in den Bedingungen von Unternehmen, die auf CSLA -Geschäftsobjekten basieren.

Ich möchte die Client -Seite die angezeigten Entitäten filtern lassen. Meine Idee ist es, die Client -Seite einen LINQ -Ausdruck zu konstruieren, ihn auf die Serverseite zu übertragen, den Daten zu holen, der den Ausdruck mit LINQ an NhiberNate entspricht und ihn wieder an den Client zurückgibt.

Ich habe Linq heruntergeladen und in NhiberNate zusammengestellt, aber leider kann ich kein Beispiel finden, das Linq -Ausdrücke (auch bekannt als Client -Seite) von der jeweiligen NHibernateContext -Instanz (auch bekannt als Serverseite) entkoppelt. Alle Beispiele scheinen wie zu sein

from c in db.Customers where ...

dh sowohl der Kontext (DB.Customers) als auch der Ausdruck (wo ...) in einer Aussage.

Ist es möglich, sie zu entkoppeln? Vielen Dank.

War es hilfreich?

Lösung 2

Dies stellt sich als ziemlich einfach heraus - - from c in db.Customers where linq-exp select c ist äquivalent zu db.Customers.Where(linq-exp).

Ich habe dies tatsächlich als Teil eines umfassenderen Problems benötigt - wenn ich einen LINQ -Ausdruck auf der Client -Seite angibt und diese zum Abrufen von Daten auf der Serverseite verwenden kann. Mein Post hier beschreibt es bei weiteren Details.

Andere Tipps

Schauen Sie sich diesen Beitrag an. Mit diesem Konzept können Sie Abfrageparameter übergeben und Ihre Abfrage dynamisch erstellen.

LINQ -Abfrage, die in foreach Loop eingebaut ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top