wake-up-neo.com

Entity Framework Join 3 Tabellen

Ich versuche, drei Tabellen zu verbinden, aber ich kann die Methode nicht verstehen ...

Ich habe die Teilnahme an zwei Tischen abgeschlossen

        var entryPoint = dbContext.tbl_EntryPoint
            .Join(dbContext.tbl_Entry,
                c => c.EID,
                cm => cm.EID,
                (c, cm) => new
                {
                    UID = cm.OwnerUID,
                    TID = cm.TID,
                    EID = c.EID,
                }).
            Where(a => a.UID == user.UID).Take(10);

tables

Ich möchte tbl_Title Tabelle mit TID PK einschließen und Title Feld erhalten.

Danke vielmals

107

Ich denke, es wird einfacher, syntaxbasierte Abfragen zu verwenden:

var entryPoint = (from ep in dbContext.tbl_EntryPoint
                 join e in dbContext.tbl_Entry on ep.EID equals e.EID
                 join t in dbContext.tbl_Title on e.TID equals t.TID
                 where e.OwnerID == user.UID
                 select new {
                     UID = e.OwnerID,
                     TID = e.TID,
                     Title = t.Title,
                     EID = e.EID
                 }).Take(10);

Und Sie sollten wahrscheinlich die orderby -Klausel hinzufügen, um sicherzustellen, dass Top(10) die korrekten Top-Ten-Elemente zurückgibt.

175
MarcinJuraszek

Dies ist nicht getestet, aber ich glaube, die Syntax sollte für eine Lambda-Abfrage funktionieren. Wenn Sie mit dieser Syntax mehr Tabellen verknüpfen, müssen Sie einen Drilldown in die neuen Objekte durchführen, um die Werte zu erreichen, die Sie bearbeiten möchten.

var fullEntries = dbContext.tbl_EntryPoint
    .Join(
        dbContext.tbl_Entry,
        entryPoint => entryPoint.EID,
        entry => entry.EID,
        (entryPoint, entry) => new { entryPoint, entry }
    )
    .Join(
        dbContext.tbl_Title,
        combinedEntry => combinedEntry.entry.TID,
        title => title.TID,
        (combinedEntry, title) => new 
        {
            UID = combinedEntry.entry.OwnerUID,
            TID = combinedEntry.entry.TID,
            EID = combinedEntry.entryPoint.EID,
            Title = title.Title
        }
    )
    .Where(fullEntry => fullEntry.UID == user.UID)
    .Take(10);
67
Pynt
var entryPoint = (from ep in dbContext.tbl_EntryPoint
                 join e in dbContext.tbl_Entry on ep.EID equals e.EID
                 join t in dbContext.tbl_Title on e.TID equals t.TID
                 where e.OwnerID == user.UID
                 select new {
                     UID = e.OwnerID,
                     TID = e.TID,
                     Title = t.Title,
                     EID = e.EID
                 }).Take(10);          
4
user7972908