NHibernate使用Criteria for Count(),First()

时间:2010-03-19 08:22:55

标签: nhibernate criteria

我有一个关于Criteria方法的问题,与数据库的一对多关系,'one'是“帐户”,'many'是“ sites ” ,当我使用CreateCriteria()时,某些事情是不对的。

像这样:SessionFactory.OpenSession().CreateCriteria(typeof(Account)).List().Count();

在运行之前,我认为SQL应该是SELECT COUNT(*) FROM table,但SQL是SELECT id, siteurl...FROM table。那有什么不对呢?我该如何解决?

First()方法应该是SELECT TOP1 ...FROM table,但它是SELECT ...FROM table

我是Nhiberate的新秀,请帮助我。

1 个答案:

答案 0 :(得分:12)

这是因为在查询运行之后以及在数据库之外执行最后调用的Count方法。您只计算内存中列表中的元素。要实现您的目标,您可以使用投影:

var count = session
    .CreateCriteria<Account>()
    .SetProjection(
        Projections.Count(Projections.Id())
    )
    .UniqueResult<long>();