2010-08-13 70 views
0

特定实体的实体,我想使这个查询:的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 Criteria API提供相同的查询,这也会非常有帮助。

+0

如果您为用户和付款发布了地图+模型,则可能会有帮助.... – DanP 2010-08-13 13:27:45

回答

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

我不知道这是否会在特定的情况下工作,但我会用.Any()扩展清理LINQ查询了一下;例如:

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