que tienen este método Repositorio¿Cómo obtener un resultado distinto con nHibernate y 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();
}
Usted suministra una cadena de búsqueda de texto libre y una lista de etiquetas. El problema es que si un mensaje tiene más de una etiqueta, aparece duplicado. Quiero un resultado distinto basado en la entidad Mensaje. Miré
Projections.Distinct
Pero requiere una lista de Propiedades para la pregunta específica en. Este mensaje es la raíz de mi entidad. ¿Hay una forma de obtener este comportamiento sin proporcionar todas las propiedades de la entidad?
Gracias de antemano, Anders
La API de ICriteria no es muy fluida con QueryOver, pero .TransformUsing (Transformers.DistinctRootEntity); funciona perfecto – Anders
.TransformUsing (Transformers.DistinctRootEntity) No funcionó en absoluto con Paging:/¿Alguna otra idea? – Anders
No funcionará con paginación. Para las consultas de paginación necesitará usar las proyecciones – Sly