我有一个名为PatientCase的类,它映射到数据库中的PatientCase表
我有另一个名为Provider的类,它映射到数据库中的Provider表
PatientCase类有2个类作为属性
1)Provider类型的AssignedProvider - 在PatientCaseTable中映射到AssignedProviderID
2)Provider类型的辅助提供者 - 映射到PatientCaseTable中的AncillaryProviderID
现在,
给定ProviderID,我如何过滤案例对象
AssignedProviderID = ProviderID
OR
AncillaryProviderID = ProviderID
Plz帮帮我
答案 0 :(得分:1)
经典标准的漫长道路如下:
session
.CreateCriteria<PatientCase>()
.Add(new Disjunction()
.Add(Restrictions.Eq("AssignedProvider", provider))
.Add(Restrictions.Eq("AncillaryProvider", provider)));
不是我使用提供者本身作为参数,而不是它的Id。通常更多的是“面向对象”与实体一起使用而不是id。要使用ID,您可以加入表格:
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);
答案 1 :(得分:0)
caseCriteria.Add(
Expression.Or(
Expression.Eq("Provider.Providerid", providerId),
Expression.Eq("AncillaryProvider.Providerid", providerId)
)
);