2010-12-05 2 views
2


Я реализует «QueryEngine» шаблон проектирования динамических запросов
на рыхлое подключение к языку запроса (например, LINQ).
Мне тяжело писать HQL для определенного элемента из списка.
т.е.Выбор по конкретным элементам в списке в HQL

public class Cat() 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Cat Child { get; set; } 
} 

Теперь я пытаюсь выбрать кошку своего ребенка, так что HQL должно быть что-то вроде этого:

SELECT cat FROM CAT as cat 
WHERE cat.Child = {"Any value or subsearch"} 

Но если я изменить класс Cat, чтобы иметь один-ко-многим Справочно:

public class Cat() 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public IList<Cat> Children { get; set; } 
} 

HQL теперь будет выглядеть следующим образом (я пытаюсь выбрать на конкретного ребенка в списке)

SELECT cat FROM CAT as cat 
WHERE {"Any value or subsearch"} IN elements(Children} 

Мой вопрос, я могу сделать второй запрос будет похож на того, к первому
Что-то вроде этого:

SELECT cat FROM CAT as cat 
WHERE Children CONTAIN {"Any value or subsearch"} 

Спасибо [=

ответ

3

Вы, вероятно, глядя для чего-то вроде этого:

select cat from Cat cat 
    join cat.Children child 
    where child.Something is true 
+0

Проблема с этим HQL заключается в том, что мне нужно будет указать QueryEngine вставить предложение «Присоединиться» после выбора. Шаблон проектирования разделен на разные классы, и каждый класс отвечает за вставку части HQL в общий запрос .. Таким образом, генератор предложения SELECT даже не знает о генераторе предложения WHERE. – 2010-12-05 09:00:53

1

Ни HQL, ни Linq отлично подходят для динамических целей связанных запросов.

Я предлагаю вместо этого использовать Criteria.

Смежные вопросы