2010-04-27 2 views
2

Я создаю метод, который может создать фильтр, понятный NHibernate (например, фильтром i означает набор объектов ICriteria) из моего объекта абстрактного фильтра.Возможно ли создать ICriteria/ICriterion из LINQ или HQL?

public static IEnumerable<ICriterion> ToNhCriteria(this MyCriteria criteria) 
{ 
    // T4 generated function 
    // lots of result.Add(Expression.Or(Expression.Eq(),Expression.Eq)) expression trees - hard to generate 
    // Is there a way to generate HQL/Linq query here istead? 
} 

тогда я хочу сделать что-то вроде

session.CreateCriteria<Entity>().Add(myCriteria.ToNhCriteria()) 

для фильтрации объектов. Проблема в том, что использование выражения. методы (Expression.Or и т. д.) довольно утомительны (метод сгенерирован и у меня есть несколько или операторов, которые каким-то образом должны быть объединены в выражение). Есть ли способ избежать использования Expression.Or() и создания ICrietrion/ICriteria с использованием LINQ или HQL?

+2

Используете ли вы T4 во время разработки или времени выполнения для генерации ICriteria? Если во время разработки, что мешает вам использовать T4 для генерации HQL (или Linq) вместо этого? –

+0

Да, я использую T4 во время разработки, и, как вы предположили, я могу использовать HQL или Linq вместо ICriteria. Проблема была вызвана нехваткой знаний, а не рамками ограничений. В настоящее время я использую API ICriteria, хотя, как представляется, он наиболее читабель для кого-то, кто читает T4, и теперь он работает правильно. – adrin

ответ

0

Нет, что невозможно. Почему бы вам не использовать linq вместо критериев?

0

Linq - не лучшее решение, если вы не хотите, чтобы фильтрация выполнялась не на стороне базы данных, а на стороне datbase, используя предложения WHERE. Ayende предлагает, что ICriteria API хорошо подходит для создания динамического фильтра, проблема, с которой я столкнулась с несколькими OR, была решена с помощью Restrictions.Disjunction() ... что упростило много В то время, когда я задал вопрос, t реализуют такие вещи в NHibernate :)

1

Эй, вы проверили this вопрос? Он показывает переход от Linq в NHibernate к MultiCriteria (и по пути преобразует запрос linq в ICriteria)

Смежные вопросы