[C#] Entity Framework 조인 3 테이블

세 개의 테이블을 조인하려고하는데 방법을 이해할 수 없습니다 …

조인 2 테이블을 완료했습니다

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

테이블

TID PK와 함께 tbl_Title 테이블 을 포함 시키고 제목 필드를 얻고 싶습니다 .

고마워



답변

구문 기반 쿼리를 사용하면 더 쉬울 것이라고 생각합니다.

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

그리고 아마도 상위 10 개 항목을 올바르게 리턴 orderby하도록 절을 추가해야 Top(10)합니다.


답변

이것은 테스트되지 않았지만 구문이 람다 쿼리에서 작동해야한다고 생각합니다. 이 구문을 사용하여 더 많은 테이블을 조인 할 때 조작하려는 값에 도달하려면 새 개체로 드릴 다운해야합니다.

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


답변