2016-07-13 5 views
2

Ich möchte eine Abfrage mit nhibernate ausführen, aber ich möchte Parameter als Inline-String ohne Alias ​​hinzufügen, die folgenden Beispiele erklären, was ich meine.Nhibernate Parameter als Inline-Text hinzufügen

Standardabfrage generiert:

SELECT * FROM Accounts WHERE AccountNumber in (@p0 , @p1 , @p2) 

Beabsichtigte query:

SELECT * FROM Accounts WHERE AccountNumber in ('0','1','2') 

FYI: Ich verwende Orchard CMS

+0

Können Sie die Frage bitte umformulieren? Meinst du, dass Sie keine parametrisierten Abfragen wünschen? –

+0

Ja, Sie haben Recht. Ich möchte den Standard Weg verwenden, um die Abfrage in Nhibernate aber ohne Parameter in der generierten Abfrage (Inline-Parameter) zu erstellen, wenn es so etwas wie Einstellungen für die Abfrage gibt, um es zu erreichen? – mdameer

Antwort

1

Schließlich fand ich die Lösung mit Expression.Sql, die Hybrid-Abfrage als Lambda-Ausdrücke und Klartext-Ausdrücken verwendet, und der folgende Code wird es erklären:

var accountQuery = _session.CreateCriteria(typeof(AccountRecord)); 
accountQuery.Add(Expression.Sql("AccountNumber in ('" + string.Join("','", contractAccountsList) + "')")); 
accountQuery.Add(Restrictions.Eq("IsRegistered", true)); 
var result = accountQuery.List().AsEnumerable(); 

Sie können es bauen Criteria oder QueryOver mit wie du willst.

Danke für alle versucht, mir bei der Lösung dieses Problems zu helfen.

0

Kann HQL verwenden:

var accountNumbers = new[] {1, 2, 3, 4}; 

var hql = string.Format("from Account where Account.AccountNumber in ({0})", string.Join(",",accountNumbers)); 

var results = session.CreateQuery(hql).List<Account>(); 
+0

Lieber, das wird die gleiche parametrisierte Abfrage generieren. – mdameer

+0

@mdameer siehe bearbeiten – mxmissile