У меня есть приложение 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);
}