Si je devais sélectionner des lignes en fonction de certains critères, je peux utiliser l'objet ICriterion
dans NHibernate.Criterion
, comme ceci:En utilisant l'expression LINQ lieu de NHIbernate.Criterion
public List<T> GetByCriteria()
{
SimpleExpression newJobCriterion =
NHibernate.Criterion.Expression.Eq("LkpStatu", statusObject);
ICriteria criteria = Session.GetISession().CreateCriteria(typeof(T)).SetMaxResults(maxResults);
criteria.Add(newJobCriterion);
return criteria.List<T>();
}
Ou je peux utiliser la clause où de LINQ pour filtrer ce que je veux:
public List<T> GetByCriteria_LINQ()
{
ICriteria criteria = Session.GetISession().CreateCriteria(typeof(T)).SetMaxResults(maxResults);
return criteria.Where(item=>item.LkpStatu=statusObject).ToList();
}
Je préférerais le second, bien sûr. Parce que
- Il me donne un typage fort
- Je ne ai pas besoin d'apprendre encore-une autre syntaxe sous forme de NHibernate
La question est est-il un avantage de performance du premier au cours du deuxième? D'après ce que je sais, le premier va créer des requêtes SQL, donc il va filtrer les données avant de passer dans la mémoire. Ce type de performance est-il suffisamment important pour justifier son utilisation?