#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) Имеет ли это смысл?