Извлечь вызов сущностей автомобилей, находящихся в коллекции сущностей автомобилей на основе идентификаторов моделей - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу выполнить этот запрос, используя nHibernate's QueryOver.

У меня есть 2 объекта:

Car
-id
- HasMany Models

Model
-id

У меня есть этот запрос, но он не работает:

Session.QueryOver<Car>()
.JoinQueryOver(c => c.Models)
  .WhereRestrictionOn(m => m.Select(s => s.Id)).IsIn(models.Select(s => s.Id).ToList())
.ToList<Car>();

sql выглядело (из того, что я помню):

SELECT *
FROM Cars c
   INNER JOIN Models m ON (c.id = m.car_id)
WHERE 1 = 0

Но я искал:

SELECT c.*
FROM Cars c
   INNER JOIN Models m ON (c.id = m.car_id)
WHERE m.id in (1,2,3,4,5)

Что не так с моим запросом?

1 Ответ

1 голос
/ 21 ноября 2011

NH смущен излишним m => m.Select(s => s.Id).Основная причина в том, что компилятор выбрал неправильную перегрузку JoinQueryOver, которая возвращает ICollection вместо Model.Использование:

Session.QueryOver<Car>()
    .JoinQueryOver<Model>(c => c.Models)
        .WhereRestrictionOn(m => m.Id).IsIn(models.Select(s => s.Id).ToList())
    .ToList<Car>();
...