Sto tentando di creare una clausola not in
con l'API dei criteri NHibernate utilizzando NHLambdaExtensions. Leggendo la documentazione sono stato in grado di attuare la clausola di in
facendoCome faccio ad esprimere "non in" usando lambdas?
.Add(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }))
Tuttavia, quando ho avvolgo intorno SqlExpression.Not
ottengo l'errore
Error 5 The best overloaded method match for 'NHibernate.LambdaExtensions.SqlExpression.Not<oms_dal.Models.Zone>(System.Linq.Expressions.Expression<System.Func<oms_dal.Models.Zone,bool>>)' has some invalid arguments
Error 6 Argument '1': cannot convert from 'NHibernate.Criterion.ICriterion' to 'System.Linq.Expressions.Expression<System.Func<oms_dal.Models.Zone,bool>>'
sto usando questo pezzo di codice
.Add(SqlExpression.Not<Zone>(SqlExpression.In<Zone>(x => zoneAlias.ZoneId, new int[] { 1008, 1010 })))
Come posso realizzare questo? Utilizzando l'API regolare Criteri ero in grado di fare questo
.Add(Restrictions.Not(Restrictions.In("z.ZoneId", new[] { 1008, 1010 })))
corretta, che vuole un lambda booleano. Usando il tuo codice, NH ora dice 'Impossibile determinare il tipo di membro da nuovo [] {1008, 1010} .Contains (z.ZoneId)' quando eseguo la query. – Mike
Il nuovo codice fornito ora fornisce sempre l'errore "Impossibile determinare il membro da ...". La soluzione più semplice e più brutta che riesca a pensare è semplicemente fare '.Add (SqlExpression.Not (() => zoneAlias.ZoneId == 1008))' per tutto. – Mike