2011-01-06 39 views
0

我有一个名为PatientCase的类,它映射到数据库中的PatientCase表。
我有另一个叫做Provider的类映射到数据库中的Provider表。
PatientCase类有2类作为属性
1)类型的提供AssignedProvider - 映射到在PatientCaseTable AssignedProviderID
2)类型的提供AncillaryProvider - 映射到在PatientCaseTable AncillaryProviderID如何在我的情况下写标准

NOW,
给定一个ProviderID ,我怎么可以过滤对象的情况下,使得

AssignedProviderID = ProviderID 
        OR 
    AncillaryProviderID = ProviderID 

plz帮助我

+0

的NHibernate的哪个版本? – 2011-01-06 08:35:23

回答

1

经典标准的长途如下:

session 
    .CreateCriteria<PatientCase>() 
    .Add(new Disjunction() 
    .Add(Restrictions.Eq("AssignedProvider", provider)) 
    .Add(Restrictions.Eq("AncillaryProvider", provider))); 

不是说我使用提供者本身作为参数,而不是它的ID。它通常更“面向对象”来使用实体而不是id。要使用IDS,你可以加入表:

session 
    .CreateCriteria<PatientCase>() 
    .CreateCriteria("AssignedProvider", "assigned") 
    .CreateCriteria("AncillaryProvider", "ancillary") 
    .Add(new Disjunction() 
    .Add(Restrictions.Eq("assigned.Id", providerId)) 
    .Add(Restrictions.Eq("ancillary", providerId))); 

有一些更简单,更具可读性的语法左右,至少在NH 3.0(如QueryOver)。

它也更容易与HQL做到这一点:

session 
    .CreateQuery(
    @"select case from PatientCase case 
    where case.AssignedProvider = :provider 
     or case.AncillaryProvider = :provider") 
    .SetEntity("provider", provider); 
0

感谢斯特凡, 通过你的答案,我有了更多的了解标准。 不管怎么说, 这里是如何我已经解决了这个问题

caseCriteria.Add(
    Expression.Or(
     Expression.Eq("Provider.Providerid", providerId), 
     Expression.Eq("AncillaryProvider.Providerid", providerId) 
    ) 
); 
相关问题