У меня есть абстрактный класс, который унаследован двумя классами. Оба класса представляют таблицы в базе данных. У меня возникли проблемы с отображением выражений, хотя в абстрактном классе, и поэтому я получаю исключения, которые не могут быть переведены на SQL. Все вопросы, которые я нашел в Stackoverflow, говорят о столбцах, которые уже работают для меня.Отображение выражений в абстрактном классе LINQ-to-sq
Ниже приведен очень простой код, который показывает, что я имею в виду. У автомобилей и мотоциклов есть полностью отдельные реализации _isNew Expression.
public abstract class Vehicle {
public abstract boolean IsNew;
}
public partial class Car: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
public partial class Motorcycle: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
Я хотел бы иметь возможность вызывать либо _isNew выражения или свойство IsNew на IQueryable, и все же она бежит _isNew класса автомобиля в случае транспортного средства является типом автомобиля. В любом случае, я могу это сделать? Все решения, которые я пробовал, вызвали исключение, которое невозможно перевести на SQL.
Что такое '_isNew'? Не может быть выражением, которое * может * быть переведено? –
_isNew - это выражение, которое может быть переведено в SQL (например, для автомобилей Выражение> _isNew = (v) => v.Age <2; для мотоциклов Выражение > _isNew = (v) => v.Age <1; (PS: возраст - это столбец DB). Моя основная проблема заключается в том, как я могу выбрать правильный _isNew для вызова на Транспортном средстве в зависимости от унаследованного класса. функция IsNew вызовет ошибку SQL-перевода, и я не могу решить, для чего _IsNew вызывать, не проверяя тип и кастинг каждый раз. –
Sami
Я предполагаю, что это не сработает, потому что для вызова вашего переопределения IsNew вам понадобится конкретный пример либо автомобиля, либо мотоцикла. В результате EF придется сначала запросить элементы для создания этих экземпляров. – Peit