我有以下方法.这将返回单个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)
它比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达到您想要的结果.
| 归档时间: |
|
| 查看次数: |
7550 次 |
| 最近记录: |