2010-03-11 8 views
6

Ich habe ein Problem mit doppelten Blog-Post kommt zurück, wenn ich die Linq-Anweisung unten ausführen.NHibernate Linq - Duplikate Datensätze

Das Problem, dass ein Blogeintrag das gleiche Tag mehr als einmal haben kann und das Problem verursacht. Ich weiß, wenn Sie Kriterien verwenden, können Sie die folgenden Kriterien tun.SetResultTransformer (new DistinctRootEntityResultTransformer());

Wie kann ich das gleiche mit Linq tun?

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 ... Das Problem ist, dass NH .Distinct() Ausdruck nicht richtig übersetzt? Sieht wie ein Fehler im Übersetzer aus –

+0

Es ist kein Fehler, da das DateCreated für jede Zeile eindeutig ist.Es wird empfohlen, ein Äquivalent von MAX (DateCreated) zu verwenden, andernfalls müssen Sie möglicherweise partitionieren oder auf andere Weise umgestalten, um einen Primärfilter auszuführen. – CarneyCode

Antwort

2

versuchen

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

Der alte NHibernate LINQ-Anbieter ohnehin nicht eingehalten wird. Versuchen Sie das neue eingebaute NHibernate 3.0 (um es zu verwenden, geben Sie session.Query() statt session.Linq() ein.