2017-04-18 3 views
0

Ich habe alten Code zu unterstützen. NHibernate wird verwendet, um DB abzufragen. Es gibt NHibernate LINQ-Abfragen wie IQueryOver.Where und andere. Es funktioniert gut, aber ich möchte diese Abfragen für lokale Sequenzen verwenden. In Microsoft LINQ gibt es die Methode Enumerable.AsQueryable. Gibt es ein Analogon in NHibernate LINQ?NHibernate AsQueryable LINQ analog

So habe ich das.

private IQueryOver<Package> GetPackages(GetPackageMessage message) 
      { 
       var query = SessionFactory.Current.QueryOver<Package>(); 

       if (message.TzapUtc.Use) 
       { 
        query = query.Where(x => x.Tzap_utc >= message.TzapUtc.ValueBegin); 

       }    
       if (message.Iik.Use) 
       { 
        query = use ? query.Where(x => x.Iik == message.Iik.Value); 
       } 
} 

Ich brauche diese alle Wo kann der Antrag auf meinem lokalen Sammlung IEnumerable < Paket>

statt Sammlung bekam von DB.

+0

IQueryOver macht eine NHibernate -IQueryable-ähnliche Struktur verfügbar, wenn ich mich erinnere. So sind die beiden schon etwas analog. Das heißt, Sie sind wahrscheinlich besser dran, direkt zu Entity Framework über Linux-zu-SQL für die meisten Projekte zu wechseln. –

+0

@DavidL, [tag: quereyover] hat nur die Verwendung von Lambda gemeinsam mit Linq, aber sonst nichts. Sie sind inkompatibel API. Siehe meine Antwort unten für etwas mehr Details. –

Antwort

1

* hat mit Linq-Abfragen nichts zu tun. Es beinhaltet keine Abfrage. Daher können Sie keinen QueryOver-Aufruf auf eine Abfrage anwenden. QueryOver ist eine stark typisierte Variante von , die Lambda verwendet, um eine starke Typisierung zu erreichen. Wenn Sie Linq mit NHibernate verwenden möchten, verwenden Sie stattdessen .

using NHibernate.Linq; 

... 

var query = SessionFactory.Current.Query<Package>(); 

Dann würden Sie Ihre query mit einem abfragbaren der Substitution von einem erhaltenen Speicher Sammlung der Lage sein, die Enumerable.AsQueryable Methode Linq verwenden.

*: oder , Synonymabstimmung steht aus.