2009-08-31 8 views
4

J'utilise NHibernate 2.1 avec le fournisseur LINQ et les résultats que je reviens de cette requête ont plusieurs nœuds racine:résultats uniques à partir de requêtes jointes avec le fournisseur NHibernate LINQ

public IList<Country> GetAllCountries() 
{ 
    List<Country> results = (from country in _session.Linq<Country>() 
          from states in country.StateProvinces 
          orderby country.DisplayOrder, states.Description 
          select country) 
          .Distinct() 
          .ToList(); 

      return results; 
} 

Je sais que l'utilisation de l'API Critères Vous pouvez appeler DistinctRootEntityResultTransformer() pour vous assurer d'avoir un nœud racine unique, mais je suis en train de passer la plupart de mes requêtes au fournisseur NHibernate LINQ, et je ne vois pas d'équivaut.

http://nhforge.org/wikis/howtonh/get-unique-results-from-joined-queries.aspx

+0

J'ai le même problème ... –

+0

Si vous modifiez votre mapping de FetchType.Join à FetchType.Select, cela résoudra ce problème (pour obtenir les bons résultats). Mais dans la mesure où l'appel Disctin() va, je soupçonne que Distinct() dans l'implémentation Linq est buggé. –

+0

Je seconde l'assertion de Chris à propos de la méthode LINQ Distinct(). Cela ne fonctionne pas comme on s'y attend. J'espère que cela sera corrigé dans une version ultérieure. –

Répondre

2

Utilisation de la base de données Northwind, je voulais récupérer les régions distinctes des territoires ... Cette syntaxe a fonctionné correctement.

(from t in Territories 
from r in Regions 
select new 
{ 
    r.RegionDescription 
}) 
.Distinct().OrderBy(r => r.RegionDescription) 

Il y a un post sur un forum Microsoft here qui peut aider.

Questions connexes