j'ai fait l'objet POCO mis en correspondance avec la base de données comme ceci:Comparer les objets ICompositeUserType dans NHibernate
class MoneyObject
{
Money MoneyAmmount { get;set; }
string Description { get;set; }
}
MoneyAmmount - est le type d'argent qui est dérivé de ICompositeUserType et dispose de 2 propriétés décimales Montant et chaîne CurrencyCode:
class Money
{
decimal Ammount { get;set; }
string CurrencyCode { get;set; }
}
problème apparaît quand je suis en train de chercher l'aide de critères, comme les données de base de données suivantes:
var criteria = session.CreateCriteria(typeof(MoneyObject))
.Add(Expression.Lt("MoneyAmmount", money));
Il génère suivant la requête SQL:
SELECT this_.Id as Id2_0_, this_.Value as Value2_0_, this_.Currency as Currency2_0_, this_.Description as Descript4_2_0_
FROM MoneyObject this_
WHERE this_.Value < @p0 and this_.Currency < @p1;@p0 = 300,01, @p1 = 'USD'
Je ne veux pas comparer mon objet valuetype argent en utilisant CurrecyCode par caractère. Je souhaite comparer Money uniquement en fonction de la propriété amount et extraire des données à l'aide de critères. Mais traitant des critères uniquement avec les propriétés de l'objet POCO. Signifie que je sais qui fonctionne comparision:
Expression.Lt("MoneyAmmount.Ammount", money.Ammount)
Je veux éviter la comparaison par les propriétés de l'objet valuetype et de réaliser la comparaison uniquement entre les objets valuetype comme
Expression.Lt("MoneyAmmount", money)
Quelqu'un sait-il comment changer ce comportement comparer?
Oui je sais à ce sujet, mais je veux comparer des objets d'argent en valeur ammount et non une propriété ammount décimale. J'ai besoin de comparer des objets de type valuetype par propriétés numériques ou par une logique personnalisée car je fais face à une grande quantité de types composites différents. – Regfor
Désolé, la question indique que vous souhaitez comparer l'argent par la propriété montant. Pourriez-vous nous dire quelle est la variable «argent»? Désolé si je ne comprends pas. –
À moins que je manque quelque chose de vraiment évident, votre première expression de critères est correct, le SQL généré va toujours comparer sur les deux propriétés de votre objet POCO, la base de données contient uniquement les données, il faut comparer à la fois si vous ne voulez faire correspondre les objets Money dans la propriété MoneyAmmount. Désolé si cela ne vous aide pas. –