Как получить четкий результат с помощью nHibernate и QueryOver API?

У меня есть этот метод репозитория

    public IList<Message> ListMessagesBy(string text, IList<Tag> tags, int pageIndex, out int count, out int pageSize)
    {
        pageSize = 10;
        var likeString = string.Format("%{0}%", text);
        var query = session.QueryOver<Message>()
            .Where(Restrictions.On<Message>(m => m.Text).IsLike(likeString) || 
            Restrictions.On<Message>(m => m.Fullname).IsLike(likeString));

        if (tags.Count > 0)
        {
            var tagIds = tags.Select(t => t.Id).ToList();
            query
                .JoinQueryOver<Tag>(m => m.Tags)
                .WhereRestrictionOn(t => t.Id).IsInG(tagIds);
        }            

        count = 0;
        if(pageIndex < 0)
        {
            count = query.ToRowCountQuery().FutureValue<int>().Value;
            pageIndex = 0;
        }
        return query.OrderBy(m => m.Created).Desc.Skip(pageIndex * pageSize).Take(pageSize).List();
    }

Вы предоставляете строку для поиска произвольного текста и список тегов. Проблема в том, что если сообщение имеет более одного тега, оно повторяется в списке. Я хочу получить отчетливый результат на основе сущности сообщения. Я посмотрел на

Projections.Distinct

, но для ответа на отдельный вопрос требуется список свойств. Это сообщение является корнем моей сущности, есть ли способ добиться такого поведения без предоставления всех свойств сущности?

Заранее спасибо, Андерс

48
задан Anders 6 January 2011 в 14:01
поделиться