web-dev-qa-db-fra.com

Entity Framework Joindre 3 Tables

J'essaie de joindre trois tables mais je ne comprends pas la méthode ...

J'ai complété rejoindre 2 tables

        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

Je voudrais inclure tbl_Title table avec le champ TID PK et get Title.

Merci beaucoup

107
Erçin Dedeoğlu

Je pense que ce sera plus facile en utilisant une requête basée sur la syntaxe:

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);

Et vous devriez probablement ajouter la clause orderby pour vous assurer que Top(10) renvoie les dix principaux éléments corrects.

175
MarcinJuraszek

Ceci n’a pas été testé, mais je pense que la syntaxe devrait fonctionner pour une requête lambda. Au fur et à mesure que vous rejoignez plusieurs tables avec cette syntaxe, vous devez explorer les nouveaux objets pour atteindre les valeurs que vous souhaitez manipuler.

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