2010-03-11 5 views
6

У меня возникла проблема с дублированием сообщения в блоге, когда я запустил инструкцию linq ниже.NHibernate Linq - Duplicate Records

Проблема в том, что сообщение в блоге может иметь один и тот же тег более одного раза, и это вызывает проблему. Я знаю, когда вы используете критерии, вы можете сделать следующий crititeria.SetResultTransformer (новый DistinctRootEntityResultTransformer());

Как я могу сделать то же самое с 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

Хм ... Проблема в том, что NH не переводит выражение .Distinct() правильно? Выглядит как ошибка в переводчике –

+0

Это не ошибка, потому что DateCreated будет уникальной для каждой строки? Я предлагаю вам использовать эквивалент MAX (DateCreated), иначе вам может понадобиться разделить или реорганизовать каким-либо другим способом для выполнения первичного фильтра. – CarneyCode

ответ

2

попробовать

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

старый поставщик NHibernate LINQ не поддерживается в любом случае. Попробуйте новый встроенный модуль NHibernate 3.0 (для его использования вы вводите session.Query() вместо session.Linq().