Подзапрос ICriteria

#nhibernate #subquery #icriteria

#nhibernate #подзапрос #icriteria

Вопрос:

Я должен использовать простые объекты

     public class EntityA
    {
         public virtual int ID { get;set;}
         public virtual string Name { get;set;}
         public virtual IList<EntityB> BList { get;set;}

         public EntityA()
         {
            BLIst = new List<EntityB>();
         }
    }


    public class EntityB
    {
         public virtual int ID { get;set;}
         public virtual string Name { get;set;}
         public virtual int Value { get;set;}
         public virtual EntityA EntityA { get;set;}
    }
  

Как мне создать запрос ICriteria, где EntityA.Name = должны быть запрошены ‘Строка поиска’ и список (((EntityB.Name =’Name1′ И (EntityB.Value=1)) И ((EntityB.Name =’Name2′) И (EntityB.Value=1)))

Поиск может содержать список, и я попробовал следующий запрос:

             if (SearchBLIst.Count > 0)
            {
                foreach (EntityB searchAttribute in SearchBLIst)
                {
                    Junction disjunction1 = Restrictions.Disjunction();
                    disjunction1.Add(
                                Expression.Eq("entityB.ID", searchAttribute.ID) amp;amp;
                                Expression.Ge("attributeValues.Value",searchAttribute.value));
                    store.Add(disjunction1);

                }
            }
  

Ответ №1:

Ожидается, что имя объекта b будет иметь 2 разных значения одновременно.

Я предполагаю, что вы также хотите использовать свойство другого объекта в ограничении. Вам нужен «псевдоним соединения».

Комментарии:

1. EntityA = Автомобиль, EntityB=Атрибуты (миль/ч, длина, размер колеса и т.д.). Автомобиль может иметь несколько атрибутов, и каждый атрибут может иметь несколько значений

2. Я думаю, мне нужно получить следующий select * Из EntityA, где EntityA. ИДЕНТИФИКАТОР в (ВЫБЕРИТЕ EntityB.EntityA Из EntityB, ГДЕ ((ID = 1) И (Значение = N’1′)) Или ((ID = N’2′) И (Значение = N’1′)) Группа по EntityB.EntityA, имеющая количество (EntityB.EntityA) = 2) Имеет ли это смысл?