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

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

Вопрос

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

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

Я загрузил и собрал LINQ в Nhibernate, но, к сожалению, я не могу найти пример, который выводит экспрессии LINQ (AKA Client Side) от соответствующего экземпляра NhibernateContext (AKA Server). Все примеры кажутся похожими

from c in db.Customers where ...

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

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

Это было полезно?

Решение 2

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

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

Другие советы

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

Запрос LINQ встроенный в цикл Foreach всегда берет значение параметров из последней итерации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top