Comment obtenir une nette résultat avec nHibernate et QueryOver API?
J'ai ce Référentiel méthode
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();
}
Vous fournir un texte libre de la chaîne de recherche et une liste de Balises.
Le problème est que si un message a plus d'un tag, il est répertorié dupliqué fois.
Je veux une nette résultat basé sur le Message de l'entité. J'ai regardé
Projections.Distinct
Mais il nécessite une liste de Propriétés à la question distincte sur. Ce Message est mon entité racine il y a plus être un moyen d'obtenir ce comportement, sans fournir l'ensemble des propriétés d'entité?
Merci d'avance, Anders
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de la ICriteria de l'API, vous devez:
Si vous êtes à l'aide de la QueryOver de l'API, vous devez:
Mais attention, tout cela se produit sur le côté client, de sorte que toutes les lignes en double sont encore tiré.
Essayer quelque chose comme cela
Vous pouvez utiliser SelectList et GroupBy, e.g:
Doit travailler et produire le même plan de requête distincte.
Si vous avez besoin de plusieurs éléments dans le groupe, faire quelque chose comme:
J'ai récemment créé une méthode pour appliquer select distinct basé sur un mappé type d'objet.
Il s'applique à un IQueryOver objet (propriété de la classe). La méthode a également accès à la nhibernate config. Vous pouvez ajouter ces paramètres de la méthode. Besoin de travail pour la production, mais la méthode fonctionne très bien en dev, il ne doit être utilisé pour une entité jusqu'à présent.
Cette méthode a été créée parce que je suis en train de la page mes données au niveau du serveur, et d'une remarquable résultat transformateur ne fonctionne pas.
Après que vous obtenez votre collection d'objets (requête.List ()), vous pourriez avoir à recharger les objets pour remplir un seul de beaucoup d'objets enfant. De nombreuses à un mappages sera mandaté pour les paresseux charges.
Code que j'ai utilisé pour charger l'un de beaucoup de relations... T est le type d'entité.