У меня есть этот метод репозитория
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();
}
Вы предоставляете строку бесплатного текстового поиска и список тегов. Проблема в том, что если сообщение имеет более одного тега, оно отображается в дублированном времени. Я хочу получить отличный результат на основе объекта Message. Я просмотрел
Projections.Distinct
Но для этого требуется список свойств для отдельного вопроса. Это сообщение является моим корнем сущности, наиболее вероятно, способ получить это поведение без предоставления всех свойств объекта?
Заранее спасибо, Anders