簡體   English   中英

NHIbernate OR Criteria Query

[英]NHIbernate OR Criteria Query

我有以下映射類

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

現在我無法弄清楚選擇所有交易的方式

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

我可以使用以下方法讓AND工作:

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

但是我怎么能把它變成一個OR而不是一個AND。 我之前使用過Disjunction,但我似乎不知道如何添加單獨的標准,只是限制。

嘗試:

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>();

我認為你不需要別名公司。

我認為您的NHibernate選項取決於您使用的NHibernate版本。

Disjunction = OR,Conjunction = AND

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

與此相同的問題在這里


Jamie Ide剛剛回答得更徹底......它的要點是這樣的:

.Add(Restrictions.Or(
    Restrictions.Eq("object1.property1", criteriaValue), 
    Restrictions.Eq("object2.property3", criteriaValue))

使用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>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM