2010-08-13 63 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));