NHibernate的.获得singleOrDefault

fro*_*sty 1 nhibernate

我有以下方法.这将返回单个unqiue订单.但是我只想要第一个结果.实现这一目标的最佳方法是什么?当然我可以返回一个List,然后从中获得第一个结果.

.List<Order>().SingleOrDefault();

当然,通过标准api可以实现这一目标吗?

    Model.Order order = _session
            .CreateCriteria(typeof(Model.Order))
            .Add(Restrictions.Eq("UserName", user.UserName))
            .Add(Restrictions.Eq("CompanyId", companyId))
            .Add(Restrictions.Eq("OrderStatus", OrderStatusHelper.OrderOpen()))
            .AddOrder(sortOrder)
            .UniqueResult<Model.Order>(); // results not always unique
Run Code Online (Sandbox Code Playgroud)

Die*_*hon 7

它比Saint Gerbil建议的稍微复杂一点:

Model.Order order = _session
        .CreateCriteria<Model.Order>()
        .Add(Restrictions.Eq("UserName", user.UserName))
        .Add(Restrictions.Eq("CompanyId", companyId))
        .Add(Restrictions.Eq("OrderStatus", OrderStatusHelper.OrderOpen()))
        .AddOrder(sortOrder)
        .SetMaxResults(1)
        .UniqueResult<Model.Order>();
Run Code Online (Sandbox Code Playgroud)

这将使用DB语法进行查询,仅检索一条记录.

如果没有符合条件的记录,则UniqueResult返回null.

您也可以使用NHibernate Linq(2.x contrib提供程序,或NH 3.x中集成的提供程序).在这种情况下,您应该使用FirstOrDefault而不是SingleOrDefault达到您想要的结果.