10
votes

Nibernate ou critère requête

J'ai les classes mappées suivantes xxx

maintenant je ne peux pas comprendre un moyen de sélectionner toutes les transactions où xxx

je peux obtenir et Pour travailler en utilisant ce qui suit: xxx

Mais comment puis-je transformer cela en un ou plutôt un et. J'ai déjà utilisé la disjonctionnement, mais je ne peux pas sembler savoir comment ajouter des critères distincts, des restrictions seulement.


0 commentaires

3 Réponses :


5
votes

Je pense que vos options de NHibernate dépendent de la version de NHibernate que vous utilisez.

disjonction = ou, conjonction = et xxx

Identique à cette question ici


Jamie IDE vient de répondre plus en profondeur ... le gist de Cela va comme ceci: xxx


2 commentaires

Mais comment puis-je ajouter des objets imbriqués? Je n'ai pas besoin de restrictions sur une seule propriété, j'ai besoin d'une ou de 2 propriétés différentes (sur 2 sous-classes différentes)


Je suis désolé de ne pas avoir donné de détails ... 'Jamie Ide' a juste fait. Cela devrait être ce que vous voulez et ce que j'aurais dû dire. .Ajouter (restrictions.or (restrictions.eq ("objet1.property1", critèreValue), restriction.eq ("objet2.property3", critèreValue))



24
votes

Essayez:

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


0 commentaires

3
votes

Utilisation de Linq à NHibernate:

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


0 commentaires