XML и фильтрация базы данных от Silverlight: динамический LINQ? Есть ли способ лучше? - PullRequest
1 голос
/ 07 апреля 2009

У меня есть приложение Silveright, которое позволяет пользователям задавать фильтры для нескольких разных наборов постоянных данных. Постоянные данные могут быть XML или таблицей реляционной базы данных. Я использую nHibernate для уровня базы данных, так как мне нужно поддерживать различные параметры базы данных, как минимум Postgresql и MySQL. Поля фильтра варьируются в зависимости от того, какой набор данных запрашивается.

В данный момент фильтр передается от клиента Silverlight на сервер в виде строки, и я использую класс Dynamic LINQ на сервере, чтобы преобразовать его в запрос LINQ. Это хорошо работает для случая XML, когда все данные были загружены в память, но я не уверен, что это лучший подход для базы данных.

Мой вопрос заключается в том, является ли наилучшим подходом отправка фильтра в виде строки с клиента и последующий анализ с помощью библиотеки Dynamic LINQ? Смогу ли я использовать запросы LINQ, сгенерированные с помощью nHibernate? Или я должен рассмотреть сериализацию объекта Expression в Silverlight и передать его на сервер? Или есть другой способ?

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

Ниже приведен пример интерфейса, который поддерживают мои классы персистентности, и бит, с которым я борюсь, это whereExpression.

public interface ICustomerPersistor
{
    Customer Add(Customer customer);
    Customer Update(Customer customer);
    Customer Delete(Customer customer);
    Customer Get(Guid customerId);
    int Count(string whereExpression);
    Customer Get(string username, string password);
    List<Customer> Get(string whereExpression, int offset, int count);
}

1 Ответ

1 голос
/ 07 апреля 2009

Рассматривали ли вы ADO.NET Data Services? Это позволяет вам выполнять запросы LINQ через REST API (при поддержке WCF), но инструмент выполняет всю тяжелую работу ...

Многие (не все) стандартные фильтры LINQ (и т. Д.) Поддерживаются и могут быть составлены.

В частности, для запроса данных службы данных ADO.NET должны подойти - для обновления данных вам необходимо проделать дополнительную работу (или использовать отдельный API без REST для обновления). У меня есть серия постов в моем блоге , посвященных этому вопросу для LINQ-to-SQL (работа должна быть аналогичной для других поставщиков LINQ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...