代码之家  ›  专栏  ›  技术社区  ›  frosty

尼伯内特。获取单个默认值

  •  1
  • frosty  · 技术社区  · 16 年前

    .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
    
    2 回复  |  直到 16 年前
        1
  •  7
  •   Diego Mijelshon    16 年前

    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>();
    

    这将使用DB语法进行查询,以便只检索一条记录。

    如果没有符合条件的记录, UniqueResult

    您还可以使用NHibernate Linq(2.x contrib提供程序或集成在nh3.x中的提供程序)。在这种情况下,你应该使用 FirstOrDefault 而不是 SingleOrDefault

        2
  •  1
  •   Mark Broadhurst    16 年前
        IList<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)
            .SetMaxResults(1)
            .List<Model.Order>(); // results not always unique
    
            if(order.Count == 1)
            {
                 return order[0];
            }
            else
            {
                 return default(Model.Order)
            }
    

    像这样的。