2010-03-11 6 views
6

J'ai un problème avec la publication d'un article en double lorsque je lance l'instruction linq ci-dessous.NHibernate Linq - Enregistrements en double

Le problème qu'un article de blog peut avoir le même tag plus d'une fois et qui cause le problème. Je sais que lorsque vous utilisez des critères, vous pouvez faire le followingcriteria.SetResultTransformer (new DistinctRootEntityResultTransformer());

Comment faire la même chose avec linq?

List<BlogPost> result = (from blogPost in _session.Linq<BlogPost>() 
         from tags in blogPost.Tags 
         where tags.Tag == tag && blogPost.IsPublished 
          && blogPost.Slug != slugToExclude 
         orderby blogPost.DateCreated descending 
         select blogPost).Distinct() 
         .Skip(recordsToSkip).Take(pageSize).ToList(); 
+0

Hm ... Le problème est que NH ne traduit pas l'expression .Distinct() correctement? On dirait un bogue dans le traducteur –

+0

Ce n'est pas un bogue car le DateCreated serait unique pour chaque ligne Je vous suggère d'utiliser un équivalent de MAX (DateCreated) sinon vous devrez peut-être partitionner ou refactoriser d'une autre manière pour effectuer un filtre primaire. – CarneyCode

Répondre

2

essayer

List<BlogPost> result = (from blogPost in _session.Linq<BlogPost>() 
         where blogPost.Tags.Any(t => t == tag) 
          && blogPost.IsPublished 
          && blogPost.Slug != slugToExclude 
         orderby blogPost.DateCreated descending 
         select blogPost).Distinct() 
         .Skip(recordsToSkip).Take(pageSize).ToList(); 

L'ancien NHibernate fournisseur LINQ n'est pas maintenue de toute façon. Essayez le nouveau intégré de NHibernate 3.0 (pour l'utiliser vous tapez session.Query() au lieu de session.Linq()

Questions connexes