Как написать Критерии в моем случае - PullRequest
0 голосов
/ 06 января 2011

У меня есть класс PatientCase, который сопоставляется с таблицей PatientCase в базе данных.
У меня есть другой класс с именем Provider, который сопоставляется с таблицей Provider в базе данных.
Класс PatientCase имеет 2 класса свойств
1) AssignedProvider типа Provider - сопоставляет AssignedProviderID в PatientCaseTable
2) AncillaryProvider типа Provider - сопоставляет AncillaryProviderID в PatientCaseTable

сейчас
Учитывая ProviderID, как я могу отфильтровать объекты дела, чтобы

 AssignedProviderID = ProviderID  
                  OR  
    AncillaryProviderID = ProviderID  

Плз Помогите мне

Ответы [ 2 ]

1 голос
/ 06 января 2011

Долгий путь классических критериев следующий:

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

не то чтобы я использовал сам провайдер в качестве аргумента, а не его идентификатор. Как правило, это более «объектно-ориентированный», чтобы работать с сущностями, а не с идентификатором. Чтобы использовать идентификаторы, вы можете присоединиться к таблицам:

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 голосов
/ 07 января 2011

спасибо stefan, благодаря вашему ответу я узнал больше о критериях.В любом случае, вот как я решил проблему

caseCriteria.Add(
    Expression.Or(
        Expression.Eq("Provider.Providerid", providerId),
        Expression.Eq("AncillaryProvider.Providerid", providerId)
   )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...