2009-01-07 7 views
2

J'essaie d'utiliser la méthode de requête de Fluent-NHibernate qui ressemble à ceci:Requête Linq complète à la place de Lambda avec Fluent-NHibernate?

public T[] Query<T>(Expression<System.Func<T, bool>> where) 
     { 
      return _session.Linq<T>().Where(where).ToArray(); 
     } 

J'utilise VB, afin d'envoyer une expression lambda, je peux l'appeler avec une ligne comme celle-ci:

Dim products = flRepos.Query(Of Product)(Function(p As Product) p.Id > 5) 

Cette syntaxe est correcte, mais il existe un problème avec l'utilisation sous-jacente de Linq à Nhibernate par Fluent qui se casse lors de l'utilisation d'expressions VB lambda. Je ne vais pas utiliser les expressions lambda, je n'ai pas la moindre idée de comment je réécrirais cette ligne pour ne pas utiliser un lambda. Pour référence, l'utilisation de requêtes LINQ complètes dans VB fonctionne avec Linq 2 Nhibernate. Cette requête a bien fonctionné pour moi:

Dim product = (From p In session.Linq(Of Product)() _ 
         Where p.Id = testId _ 
         Select p).FirstOrDefault() 

Répondre

1

Il y a beaucoup de bizarreries au modèle actuel NHibernate LINQ, malheureusement ceux-ci ne seront pas vraiment résolus jusqu'à ce que NHibernate 2.1 est libéré. Il y a des changements à apporter au noyau de NHibernate pour le supporter pleinement, donc au lieu d'un contrib il sera une partie complète/intégrée de la version 2.1. Ayende has a blog update posted a few months ago outlining the current caveats/plans.