API за критериите на Nhibernate за много към много

Моят обектен модел е следният:

Елементът има много етикети и един етикет може да принадлежи на много артикули

Бих искал да изпълня следната заявка, като използвам критерии.

SELECT * FROM Item item
WHERE item.Id in (Select it.ItemId from dbo.ItemToTags it where it.Tag_id = 'ONE')
AND item.Id in (Select it.ItemId from dbo.ItemToTags it where it.Tag_id = 'TWO')

Това означава, че бих искал да дам колекция от възможни тагове и след това да осигуря всички елементи, които имат всички тези тагове:

Опитах следното, но не получавам резултат:

CreateCriteria<Item>().CreateAlias("Tags", "Tags");
if (AndQuery) {
   foreach(var tag in Tags)
   {
      criteria.Add(Subqueries.PropertyEq("Tags.Id", DetachedCriteria.For<Tag>().Add(Restrictions.Eq("Id", tag))                                                   .SetProjection(Projections.Property("Id"))));
   }
} 

person Patrick    schedule 04.10.2010    source източник


Отговори (1)


Не съм сигурен дали вашето запитване може да се преведе като:

SELECT * FROM Item item 
join ItemToTags itt on itt.ItemId = item.Id
join Tags t on itt.TagId = t.Id
where t.Id in ('ONE','TWO')

Ако е така, трябва да можете да направите това:

CreateCriteria<Item>().CreateAlias('Tags','t')
   .Add(Restrictions.In('t.Id',new List<string>{'TWO','ONE'}).List<Item>();

Това предполага, че колекцията от етикети е нанесена на елемента.

чт

person sirrocco    schedule 05.10.2010
comment
Благодаря за отговора, но това ще ми даде връзката ИЛИ. Търся връзка И! Ето защо моята заявка съдържа две подизбори, а не и in! - person Patrick; 05.10.2010