如何在我的案例中写标准

时间:2011-01-06 07:23:37

标签: .net nhibernate

我有一个名为PatientCase的类,它映射到数据库中的PatientCase表 我有另一个名为Provider的类,它映射到数据库中的Provider表 PatientCase类有2个类作为属性
   1)Provider类型的AssignedProvider - 在PatientCaseTable中映射到AssignedProviderID
   2)Provider类型的辅助提供者 - 映射到PatientCaseTable中的AncillaryProviderID

现在,
给定ProviderID,我如何过滤案例对象

 AssignedProviderID = ProviderID  
                  OR  
    AncillaryProviderID = ProviderID  

Plz帮帮我

2 个答案:

答案 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)

谢谢stefan, 通过你的回答,我学到了很多关于标准的知识 无论如何, 这是我解决问题的方法

caseCriteria.Add(
    Expression.Or(
        Expression.Eq("Provider.Providerid", providerId),
        Expression.Eq("AncillaryProvider.Providerid", providerId)
   )
);