Fluent NHibernate erstellt keinen IN-Teil der WHERE-Klausel

Ich habe Fluent NHibernate Linq-Abfragen, bei denen ich Werte basierend auf Laufzeit-Arrays überprüfe. Ein einfaches Beispiel wäre so etwas wie:

var array = [1,2,3,4,5,6];
using (var session = SessionProvider.SessionFactory.OpenSession())
{
  return session.Query<MyObject>().Where(x => array.Contains(x.CompareVal)).ToList();
}

Ich würde erwarten, dass die generierte SQL-Anweisung ungefähr so ​​aussieht:

SELECT CompareVal, Column1, Column2
FROM MyObject
WHERE CompareVal IN (1,2,3,4,5,6)

Stattdessen stelle ich jedoch fest, dass die generierte SQL-Anweisung einfach die WHERE-Klausel (nachgewiesen durch Beobachten in Profiler) ausgibt, die gesamte Tabelle auswählt und dann den Filter im Speicher auszuführen scheint, sobald alle Daten zurückgekommen sind.

Etwas zu beachten - Ich habe eine Generic Repository-Klasse, über die alle diese Aufrufe weitergeleitet werden. Die Abfragemethode lautet wie folgt:

public IList<T> Query(Func<T, bool> criteria)
{
  using (var session = SessionProvider.SessionFactory.OpenSession())
  {
    return session.Query<T>().Where(criteria).ToList();
  }
}

Offensichtlich ist dies (Fehlen einer where-Klausel) in einer Tabelle mit einer großen Datenmenge nicht akzeptabel. Wie kann ich NHibernate zwingen, die Abfrage mit der WHERE-Klausel korrekt zu generieren und trotzdem ein generisches Muster für Repositorys beizubehalten?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage