Ist eine äußere Verknüpfung mit Linq zu Entity Framework möglich

entity-framework left-join linq

Frage

Es gibt viele Beispiele für die äußere Verknüpfung, die Linq mit Sql verwendet. Alle hängen von DefaultIfEmpty() das von Linq nicht mit dem Entity Framework unterstützt wird.

Bedeutet dies, dass mit Linq to Entity unter Verwendung von .NET 3.5 kein Outer-Join möglich ist (ich verstehe, dass DefaultIfEmpty mit 4.0 geliefert wird, aber dies ist derzeit keine Option für mich)

Könnte jemand bitte ein kurzes Beispiel mit Linq an EntityFramework geben.

Akzeptierte Antwort

Denken Sie in LINQ to Entities eher an Beziehungen als an SQL-Joins. Das wörtliche Äquivalent eines SQL-Outer-Joins auf einer Entität Person mit einer Eins-zu-Null-Beziehung oder einer Eins-Beziehung zu CustomerInfo wäre daher:

var q = from p in Context.People
        select new
        {
            Name = p.Name,
            IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
        };

L2E führt die Verknüpfung zusammen, sodass der gesamte Ausdruck als null ausgewertet wird, wenn CustomerInfo null ist. Daher der Cast zu einem nullfähigen Bool, weil der abgeleitete Typ des nicht-nullfähigen Bool dieses Ergebnis nicht halten konnte.

Für Eins-zu-Viele möchten Sie im Allgemeinen eine Hierarchie anstelle einer flachen Ergebnismenge im SQL-Stil:

var q = from o in Context.Orders
        select new 
        {
            OrderNo = o.OrderNo,
            PartNumbers = from od in o.OrderDetails
                          select od.PartNumber
        }

Dies ist wie eine Linksverknüpfung, sofern Sie immer noch Aufträge ohne Details erhalten, aber es ist ein Diagramm wie OO und nicht ein Satz wie SQL.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum