http://www.mouhong-lin.net/post/2009/04/30/NHibernate-source-code-Criterion-SqlString-SqlTypes.aspx
1. ICriteria, ICriterion
ICriteria是用来查询实体的,ICriterion表示一个完整SQL查询的“一部分”,ICriteria可通过组合多个ICriterion来表示一个复杂的查询(在英语中,Creteria是Creterion的复数形式)。
ICriteria接口的注释:Criteria is a simplified API for retrieving entities by composing Expression objects.
ICriterion接口的注释:An object-oriented representation of a query criterion that may be used as a constraint in a ICriteria query.
Expression继承于Restrictions,它们充当了工厂的角色,利用它们的工厂方法,可以得到实现了ICriterion接口的类(这些类表示一个标准查询)。
不理解ICriterion以及什么叫“一个标准查询”?看看ICriterion的几个实现类便知(此列举的类不是ICriterion直接子类):
LikeExpression:用来表示sql的like查询子句;
OrExpression:用来表示sql的or查询子句;
InExpression:用来表示sql的in查询子句;
......
这么看来,ICriterion就是一个sql查询(注意,是查询)的一个部分,而Criteria则可以表示一个完整的查询,于是,可以在 ICriteria中找到一个方法:List(),它返回查询的结果实体集。当然,还有UniqueResult方法,它只查询一个实体。而 ICriterion不是完整的查询,当然也就没有什么List(),UniqueResult之类的方法了。