Ich benutze Linq.Dynamic. Ich habe bereits eine weitere SelectMany-Erweiterung hinzugefügt, um ein neues anonymes Objekt mit den Daten zu erstellen. Aber ich bin auf ein anderes Problem gestoßen, das ich scheinbar nicht lösen kann.
Ich möchte die Verkettung von Erweiterungsmethoden wie folgt durchführen, aber die dynamischen Methoden verwenden:
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
});
Idealerweise möchte ich das dynamische SelectMany wie folgt verketten:
db.Customers.SelectMany(c => c.Orders.SelectMany("Order_Details", "new(outer.OrderID, inner.UnitPrice)"), "new(outer.CustomerID, inner.OrderID)");
Oder etwas in diesem Sinne. Das Problem ist, dass ich keine passende Signatur bekommen kann.
Ich habe viele verschiedene Optionen ausprobiert, um eine Verkettung zu ermöglichen. Aber es funktioniert einfach nicht. Ich denke im Idealfall würde es so aussehen:
public static IQueryable SelectMany(this IQueryable source, IQueryable innerExpression, string resultsSelector, params object[] values)
C => c.Orders wird jedoch nicht als IQueriable erkannt. Ich muss auch herausfinden, wie DefaultIfEmpty für die Ergebnisse ausgeführt wird, um LEFT JOINs zu ermöglichen.
Bitte helfen Sie.
Es wurde falsch definiert. Tatsächlicher Fehler bei richtiger Definition: Der Lambda-Ausdruck kann nicht in den Typ 'System.Linq.IQueryable' konvertiert werden, da es sich nicht um einen Delegattyp handelt