С# NHibernate динамически добавляет предложения Where (jqgrid)

Можно ли динамически добавлять предложения where в запрос NHibernate?

У меня есть набор предложений, которые мне нужно выполнить в цикле, и при необходимости добавить предложение Where, т.е. если пользователь ввел несколько критериев поиска.

Я могу написать одиночные запросы, без проблем, например: получить все имена, начинающиеся с «а»:

IEnumerable<Customer> customers = nHibernateSession.Query<Customer>().Where(x => x.Name.StartsWith("a")).ToList();

но я не знаю, как затем добавить еще одно предложение where к этому. По сути, мне нужно что-то вроде этого:

foreach (clauses in SelectionClauses)
{
    //add a .Where(Clause) to The Session.Query
}

Я подозреваю, что nHibernateSession.Query нельзя использовать таким образом... Кто-нибудь знает, как это сделать?


person Andrew Humphries    schedule 12.10.2012    source источник


Ответы (1)


Вы можете сделать это с помощью провайдера Linq (session.Query), выполнив что-то вроде:

var query = session.Query<MyClass>();

foreach(var clause in clauses)
    query = query.Where(clause.BuildExpression());

Где BuildExpression возвращает Expression> например

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

person Martin Ernst    schedule 12.10.2012
comment
Спасибо @Мартин! Я новичок в nHibernate и, если на то пошло, в Linq. Я решил это, используя Query, как вы использовали его выше, и оператор switch для определения выражения, которое я использую. - person Andrew Humphries; 12.10.2012