Можно ли избежать выражения IIF при использовании проекта AutoMapper с вложенным объектом?
У меня есть следующие viewmodels (пример для простоты).
public class ProductVM {
public int ID { get; set; }
public string Name { get; set; }
}
public class OrderVM {
public ProductVM Product { get; set; }
public double Price { get; set; }
public DateTime OrderDate { get; set; }
}
Я использую вложенную модель представления, чтобы избежать повторения (мой реальный код намного сложнее), поэтому я бы хотел избежать необходимости постоянно выравнивать Продукт.
Я использую DevExpress XPO в качестве ORM, который хорошо поддерживает выбор вложенных моделей просмотра. Однако у меня есть проблема с выражением Select, созданным Project().To<OrderVM>()
,
Когда я (вручную) пишу следующий запрос, все работает как шарм. Фильтрация, сортировка, группировка ПОСЛЕ проекции работает в ускоренном режиме (используется, например, в виде сетки).
var q = myUnitOfWork.Query<Order>().Select(e =>
new OrderVM() {
OrderDate = e.OrderDate,
Price = e.Price,
Product = new ProductVM() {
ID = e.Product.ID,
Name = e.Product.Name,
}
});
Одним из побочных эффектов является то, что если - скажем, - у Заказа нет Продукта, то Продукт в модели представления не будет нулевым, но будет иметь все пустое (ID = 0, Name = null и т. Д.). Но это хорошо для меня, потому что результат отображается в виде сетки, где я могу с этим справиться.
Так что теперь, когда я использую Project.To<OrderVM>()
выражение Select, сгенерированное AutoMapper, будет выглядеть так:
var q = myUnitOfWork.Query<Order>().Select(e =>
new OrderVM() {
OrderDate = e.OrderDate,
Price = e.Price,
Product = e.Product != null ? new ProductVM() {
ID = e.Product.ID,
Name = e.Product.Name,
} : null
});
Это, конечно, семантически более правильный подход, однако XPO будет зависать при фильтрации, сортировке и т. Д. Поэтому мне как-то нужно избегать этого IIF
выражение и остаться с чистым вложенным инициализатором. Это как-то возможно, или есть обходной путь? К сожалению, я не настолько опытен в игре с деревьями выражений.