Estoy usando Linq.Dynamic. Ya he agregado otra extensión SelectMany a todos para crear un nuevo objeto anónimo con los datos. Pero, me he encontrado con otro problema que parece que no puedo resolver.
Quiero tener el método de extensión encadenando de la siguiente manera, pero usando los métodos dinámicos:
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, me gustaría encadenar la dinámica SelectMany de la siguiente manera:
db.Customers.SelectMany(c => c.Orders.SelectMany("Order_Details", "new(outer.OrderID, inner.UnitPrice)"), "new(outer.CustomerID, inner.OrderID)");
O algo a ese efecto. El problema es que no puedo obtener una firma para que coincida.
He probado muchas opciones diferentes para conseguir que permita el encadenamiento. Pero simplemente no funciona. Estoy pensando idealmente que se vería así:
public static IQueryable SelectMany(this IQueryable source, IQueryable innerExpression, string resultsSelector, params object[] values)
Pero, no reconoce c => c. Las órdenes como IQueriable. También necesito descubrir cómo hacer DefaultIfEmpty en los resultados para permitir uniones IZQUIERDA.
Por favor ayuda.
Estaba obteniendo la definición incorrecta. Error real cuando está en la definición correcta: no se puede convertir la expresión lambda para escribir 'System.Linq.IQueryable' porque no es un tipo delegado