NHIbernate ИЛИ запрос критериев

У меня есть следующие отображенные классы

Trade { ID, AccountFrom, AccountTo }
Account {ID, Company}
Company {ID}

Теперь я не могу выяснить, что путь выбирает все отрасли где

AccountFrom.Company.ID = X OR AccountTo.Company.ID = X

Я могу добраться И работать с помощью следующего:

criteria.CreateCriteria("AccountFrom").CreateCriteria("Company").Add(Restrictions.Eq("ID", X);
criteria.CreateCriteria("AccountTo").CreateCriteria("Company").Add(Restrictions.Eq("ID", X);

Но как я могу преобразовать это в ИЛИ скорее И. Я использовал Разъединение ранее, но я, может казаться, не знаю, как добавить отдельные критерии, просто ограничения.

10
задан Andy White 14 May 2013 в 22:52
поделиться

3 ответа

Попробуйте:

return session.CreateCriteria<Trade>()
    .CreateAlias("AccountFrom", "af")
    .CreateAlias("AccountTo", "at")
    .Add(Restrictions.Or(
        Restrictions.Eq("af.Company.CompanyId", companyId), 
        Restrictions.Eq("at.Company.CompanyId", companyId)))
    .List<Trade>();

Я не думаю, что вам понадобится псевдоним «Компания».

24
ответ дан 3 December 2019 в 14:42
поделиться

Я думаю, что ваши параметры NHibernate зависят от того, какую версию NHibernate вы используете.

Дизъюнкция = ИЛИ, Конъюнкция = И

.Add(
  Expression.Disjunction()
    .Add(companyId1)
    .Add(companyId2)
)

То же, что и в этом вопросе здесь


Джейми Айдэ только что ответил более подробно ... суть этого выглядит так:

.Add(Restrictions.Or(
    Restrictions.Eq("object1.property1", criteriaValue), 
    Restrictions.Eq("object2.property3", criteriaValue))
5
ответ дан 3 December 2019 в 14:42
поделиться

Использование Linq для NHibernate:

var X = 0; // or whatever the identifier type.
var result = Session.Linq<Trade>()
                 .Where(trade => trade.AccountFrom.Company.ID == X ||
                                 trade.AccountTo.Company.ID == X)
                 .ToList();

Использование HQL:

var X = 0; // or whatever the identifier type.
var hql = "from Trade trade where trade.AccountFrom.Company.ID = :companyId or trade.AccountTo.Company.ID = :companyID";
var result = Session.CreateQuery(hql)
                 .SetParameter("companyId", X)
                 .List<Trade>();
3
ответ дан 3 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: