У меня есть этот метод RepositoryКак получить отличный результат с помощью API nHibernate и QueryOver?
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
Но для этого требуется список свойств для отдельного вопроса. Это сообщение является моим корнем сущности, наиболее вероятно, способ получить это поведение без предоставления всех свойств сущности?
Спасибо заранее, Андерс
API ICriteria не очень хорошо владеет QUEROver, но .TransformUsing (Transformers.DistinctRootEntity); работает отлично. – Anders
.TransformUsing (Transformers.DistinctRootEntity) Не работает вообще с Paging:/Любые другие идеи? – Anders
Он не будет работать с поисковым вызовом. Для запросов поискового вызова вам понадобятся Projections – Sly