/ / Outer Join funktioniert nicht in Linq Query: Die Methode 'Join' kann nicht der Methode 'SelectMany' folgen oder wird nicht unterstützt - c #, linq, linq-to-entities, dynamics-crm-2011, linqpad

Outer Join funktioniert nicht in Linq Query: Die Methode 'Join' kann nicht der Methode 'SelectMany' folgen oder wird nicht unterstützt - c #, linq, linq-to-entities, dynamics-crm-2011, linqpad

Ich schreibe das Linq Abfrage wie folgt: Aber beim Ausführen der folgende Fehlermeldung:

The method "Join" cannot follow the method "SelectMany" or is not supported. Try writing the query in terms of supported methods or call the "AsEnumerable" or "ToList" method before calling unsupported methods.

LINQ

from a in AccountSet
join sm in new_schoolMemberSet on a.AccountId equals sm.new_OrganisationId.Id
into ps from suboc in ps.DefaultIfEmpty()
join sr in new_schoolRoleSet on suboc.new_SchoolRoleId.Id equals sr.new_schoolRoleId
where sr.new_name == "Manager"
where a.new_OrganisationType.Value == 430870007
select new { a.AccountId, suboc.new_schoolMemberName }

Ich erwarte das Ergebnis wie folgt:

Bildbeschreibung hier eingeben

Ich habe den Outer nie zuvor in Linq verwendet. Also korrigiere mich bitte, wenn ich es falsch mache.

Vielen Dank

Antworten:

1 für die Antwort № 1

Der Fehler scheint ziemlich klar zu sein. Das Problem liegt nicht beim Linq, sondern beim Provider, der Ihre Anfrage nicht in etwas übersetzen kann, das am Ende ausgeführt werden kann. Um diese Theorie zu testen, können Sie einfach hinzufügen .ToList() bis zum Ende AccountSet, new_schoolMemberSet, und new_schoolRoleSet. Das wird nicht so sein, wie du das laufen willstAbfrage, aber es wird als ein Beweis dafür, ob die Abfrage fehlerhaft ist, oder der Anbieter (basierend auf dem Fehler, es ist der Anbieter, aber dies wird immer noch beweisen, dass die Abfrage ordnungsgemäß gebildet wird) handeln.

Hinzufügen ToList() Zu jeder dieser Sammlungen werden alle beitragenDaten in den Speicher und linq-to-objects werden anstelle von linq-to-whateverYourLinqProviderIs verwendet. Einige linq-Anbieter sind einfach nicht für komplexere Abfragen gerüstet. Sie können sich vorstellen, wie schwierig es ist, eine linq-Abfrage in ein Abfrageformat zu übersetzen, das der Anbieter verstehen kann. Darüber hinaus übersetzen einige linq-Abfrage-Konzepte nicht in etwas, das für einen bestimmten Anbieter möglich ist.

Also, was ist die Lösung? Sie möchten die Fähigkeit des linq-Providers nutzen, um effizient nach Daten zu suchen, aber in seinen Möglichkeiten eingeschränkt sein. Versuchen Sie, möglichst wenig Daten in den Speicher zu bringen, indem Sie Filter usw. verwenden ist unterstützt, dann den Rest mit linq-to-objects.