У меня есть набор объектов подклассов доменов, которые я получаю с помощью Linq и NHibernate. Вот пример того, что у меня есть:
public abstract class Car {
public abstract bool Runs();
}
public class Junker : Car {
public override bool Runs() {
return false;
}
}
public class NewCar : Car {
public override bool Runs() {
return true;
}
}
Мне нужно выбрать только те автомобили, которые Run()
. Итак, я хочу сделать это:
var goodCars = _session.Query<Car>().Where(car => car.Runs());
... но это не работает, потому что Runs()
не является поддерживаемым источником запросов. Вот ошибка, которую я получаю:
Cannot parse expression 'car' as it has an unsupported type. Only query sources (that is, expressions that implement IEnumerable) and query operators can be parsed.
Я пытался разделить запрос на два шага: 1) получить все машины, 2) отфильтровать по Runs()
... но я не могу сделать это, потому что это нарушает Lazy Loading (моя модель домена немного более Сложный, что мой автомобиль пример). Кроме того, я хочу получить только те элементы из базы данных, которые действительно соответствуют моему запросу.
Есть ли способ сделать то, что я пытаюсь сделать?