Можно ли создать ICriteria / ICriterion из LINQ или HQL? - PullRequest
2 голосов
/ 27 апреля 2010

Я создаю метод, который может создать фильтр, понятный NHibernate (под фильтром я имею в виду, например, набор объектов ICriteria) из моего абстрактного объекта фильтра.

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. Методы (Expression.Or и т. д.) довольно утомительны (метод генерируется, и у меня есть несколько операторов или операторов, которые должны быть каким-то образом объединены в выражение). Есть ли способ избежать использования Expression.Or () и создать ICrietrion / ICriteria с помощью LINQ или HQL?

Ответы [ 3 ]

1 голос
/ 21 июня 2010

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

0 голосов
/ 27 апреля 2010

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

0 голосов
/ 27 апреля 2010

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

...