В EF6 я привык к этому:
var orders = GetAllEntities().Include(x => x.Contact.User);
if (includeProducts)
{
orders = orders.Include(x => x.ProductOrders.Select(y => y.RentStockOrders));
orders = orders.Include(x => x.ProductOrders.Select(y => y.Product));
orders = orders.Include(x => x.ProductOrders.Select(y => y.Currency));
orders = orders.Include(x => x.ProductOrders.Select(y => y.Coupons));
orders = orders.Include(x => x.AdditionalCosts);
orders = orders.Include(x => x.Partner);
orders = orders.Include(x => x.OrderCoupons.Select(y => y.Coupon.Partner));
if (includeStock)
{
orders = orders.Include(x => x.ProductOrders.Select(y => y.RentStockOrders.Select(z => z.Stock)));
}
}
if (includeInvoices)
{
orders = orders.Include(x => x.Invoices.Select(y => y.Attachments));
}
В EF Core невозможно переопределить IQueryable
, потому что он более «безопасен»
Первая строка возвращает IIncludableQueryable<Order, User>
, поэтому, когда я делаю второе включение, оно хочет сделать его чем-то другим, например IIncludableQueryable<Ordr,User,ProductOrder>
У меня в основном есть GetByIdWithCrudRelations
, который содержит набор bools для выбора, что включать, а что нет. иногда у него есть только два, но в этом случае у него есть 8, что означает, что у него может быть много разных результатов, если мне понадобится все остальное.
Кто-нибудь получил умное решение для этого?