2017-04-18 2 views
0

J'ai un ancien code à supporter. NHibernate est utilisé pour interroger DB. Il y a des requêtes NHibernate LINQ comme IQueryOver.Where et autres. Cela fonctionne bien mais je veux utiliser ces requêtes pour des séquences locales. Dans Microsoft LINQ, il existe la méthode Enumerable.AsQueryable. Existe-t-il un analogue dans NHibernate LINQ?NHibernate AsQueryable LINQ analogique

Donc, j'ai ceci.

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); 
       } 
} 

-je appliquer tous ces cas à ma collection locale IEnumerable < Package>

au lieu de la collecte de DB obtenu.

+0

IQueryOver expose une structure de type NHibernate-'IQueryable' si je me souviens bien. Donc, les deux sont déjà quelque peu analogues. Cela dit, il est probablement préférable de passer directement à Entity Framework sur linq-to-sql pour la plupart des projets. –

+0

@DavidL, [tag: queryover] a seulement l'utilisation de lambda en commun avec Linq, mais rien d'autre. Ils sont incompatibles API. Voir ma réponse ci-dessous pour plus de détails. –

Répondre

1

* n'a rien à voir avec les requêtes Linq. Cela n'implique aucune requête. Vous ne pouvez donc pas appliquer d'appel QueryOver sur une requête. QueryOver est une variante fortement typée de , utilisant lambda pour obtenir un typage fort. Si vous souhaitez utiliser Linq avec NHibernate, utilisez à la place.

using NHibernate.Linq; 

... 

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

Ensuite, vous pourrez substituer votre query avec un interrogeable obtenu à partir d'une collection en mémoire, en utilisant la méthode Linq Enumerable.AsQueryable.

*: ou , vote en attente de vote.