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

linq to nhibernate:选择在一对多关联中具有特定实体的实体

  •  0
  • knut  · 技术社区  · 14 年前

    我想问一下:

    Session.Linq<User>().Where(u => u.Payments.Count(p => p.Date != null) > 0);
    

    用简单的英语,我希望得到所有至少有一个指定日期付款的用户。

    当我运行示例代码时, System.ArgumentException 带着信息:

    System.ArgumentException:找不到与以下项匹配的条件信息提供程序:this.id=sub.id

    你知道这个问题的解决办法吗?

    如果有人可以通过标准API提供与nhibernate查询相同的查询,这也将非常有用。

    2 回复  |  直到 14 年前
        1
  •  1
  •   DanP    14 年前

    我不确定这是否适用于您的特定情况,但我会使用 .Any() 扩展以稍微清除LINQ查询;例如:

    Session.Linq<User>().Where(u => u.Payments.Any(p => p.Date != null));
    
        2
  •  0
  •   Sly    14 年前

    我想是这样的:

    Customer customerAlias = null; 
    criteria = CurrentSession.CreateCriteria(typeof(User), () => customerAlias);
    if (searchCriteria.OrdersNumber.HasValue)
    {
         ICriteria paymentsCriteria = criteria.CreateCriteria<Customer>(x => x.Payments);
    
         DetachedCriteria paymentsCount = DetachedCriteria.For<Payment>();
         paymentsCount.SetProjection(Projections.RowCount());
         paymentsCount.Add(SqlExpression.NotNull<Payment>(x => x.Date));
         paymentsCount.Add<Payment>(x => x.Customer.Id == customerAlias.Id);
    
         paymentsCriteria.Add(Subqueries.Gt(1, paymentsCount));
     }
    
     return criteria.List<User>();