我想提出这个问题:
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提供相同的查询,那将非常有用。
答案 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>();