Sto usando Linq.Dynamic. Ho già aggiunto un'altra estensione SelectMany a tutti per creare un nuovo oggetto anonimo con i dati. Ma ho riscontrato un altro problema che non riesco a risolvere.
Voglio avere il metodo di estensione concatenato come segue, ma usando i metodi dinamici:
var customerandorderflat = db.Customers
.SelectMany(c => c.Orders.SelectMany(o => o.Order_Details,
(ord, orddetail) => new
{
OrderID = ord.OrderID,
UnitPrice = orddetail.UnitPrice
}).DefaultIfEmpty(),
(cus, ord) => new
{
CustomerId = cus.CustomerID,
CompanyName = cus.CompanyName,
OrderId = ord.OrderID == null ? -1 : ord.OrderID,
UnitPrice = ord.UnitPrice
});
Idealmente, vorrei concatenare SelectMany dinamico come segue:
db.Customers.SelectMany(c => c.Orders.SelectMany("Order_Details", "new(outer.OrderID, inner.UnitPrice)"), "new(outer.CustomerID, inner.OrderID)");
O qualcosa a tale effetto. Il problema è che non riesco a ottenere una firma corrispondente.
Ho provato molte opzioni diverse per ottenerlo per consentire il concatenamento. Ma non funziona. Idealmente sto pensando che sarebbe simile a questo:
public static IQueryable SelectMany(this IQueryable source, IQueryable innerExpression, string resultsSelector, params object[] values)
Ma non riconosce c => c.Orders come IQueriable. Devo anche capire come fare DefaultIfEmpty sui risultati per consentire i JOIN SINISTRI.
Per favore aiuto.
Stava ottenendo la definizione sbagliata. Errore effettivo sulla definizione corretta: impossibile convertire l'espressione lambda nel tipo "System.Linq.IQueryable" perché non è un tipo delegato