2010-03-11 15 views
6

Tengo un problema con la publicación de un blog duplicado cuando ejecuto la instrucción linq a continuación.NHibernate Linq - Duplicate Records

El problema es que una publicación de blog puede tener la misma etiqueta más de una vez y eso está causando el problema. Sé que cuando usa los criterios puede hacer el siguiente criterio: SetResultTransformer (nuevo DistinctRootEntityResultTransformer());

¿Cómo puedo hacer lo mismo con 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 ... ¿El problema es que NH no traduce correctamente la expresión .Distinct()? Parece un error en el traductor –

+0

No es un error porque el DateCreated sería único para cada fila. Le sugiero que use un equivalente de MAX (DateCreated); de lo contrario, podría necesitar particionar o refactorizar de alguna otra manera para realizar un filtro primario. – CarneyCode

Respuesta

2

tratar

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

El antiguo proveedor LINQ NHibernate no se mantiene de todos modos. Pruebe el nuevo built-in de NHibernate 3.0 (para usarlo escriba session.Query() en lugar de session.Linq().