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

时间:2010-08-13 10:18:44

标签: nhibernate linq-to-nhibernate

我想提出这个问题:

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

简单地说,我想让所有至少有一笔付款的用户都使用指定的日期。

当我运行示例代码时,我得到一个System.ArgumentException,其中包含以下消息:

  

System.ArgumentException:找不到匹配的条件信息提供者:this.Id = sub.Id

你知道这个问题的解决方案吗?

如果有人可以使用NHibernate Query by Criteria API提供相同的查询,那将非常有用。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我觉得这样的事情:

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