Использование выражений Linq для отделения клиентской части от DAL (которая является серверной)

Я не смог найти ответ среди множества сообщений в Linq, поэтому я здесь. У нас есть клиент-серверное приложение, в котором клиентская сторона абсолютно ничего не знает о фактическом DAL на стороне сервера, что, кстати, реализовано с использованием NHibernate. Это означает, что нет никаких ссылок на NHibernate из сборок на стороне клиента, а также нет абстракции базы данных. Клиентская сторона говорит строго в терминах сущностей, которые основаны на бизнес-объектах CSLA.

Я хотел бы позволить клиентской стороне фильтровать отображаемые объекты. Моя идея состоит в том, чтобы позволить клиентской стороне построить выражение Linq, передать его стороне сервера, получить данные, соответствующие выражению, с помощью Linq в NHibernate и вернуть их клиенту.

Я загрузил и скомпилировал Linq в NHibernate, но, к сожалению, я не могу найти пример, который отделяет выражения Linq (на стороне клиента) от соответствующего экземпляра NHibernateContext (он же на стороне сервера). Все примеры кажутся похожими на

from c in db.Customers where ...

т.е. как контекст (db.Customers), так и выражение (где ...) в одном выражении.

Можно ли их разъединить? Спасибо.


person mark    schedule 06.07.2009    source источник


Ответы (2)


Взгляните на этот пост. Вы можете использовать эту концепцию, чтобы передать параметры запроса, а затем динамически построить свой запрос.

запрос Linq, построенный в цикле foreach всегда принимает значение параметра с последней итерации

person Andrew Siemer    schedule 06.07.2009
comment
Привет, Андрей. Зашел по ссылке. Но все образцы там связывают контекст и выражение в одном операторе linq. Мне нужно что-то вроде этого: var expr = GetExpressionFromUser (); // ‹- на стороне клиента var results = FetchByExpression ‹T› (expr); // ‹- на стороне сервера - person mark; 06.07.2009

Это оказывается довольно просто - from c in db.Customers where linq-exp select c эквивалентно db.Customers.Where(linq-exp).

На самом деле мне это нужно как часть более широкой проблемы - указать выражение linq на стороне клиента и использовать его для получения данных на стороне сервера. Мой пост здесь описывает это более подробно.

person mark    schedule 17.07.2009