2016-01-14 36 views
0

我想加入兩個模型,然後從連接表中選擇值。我實現的目標遠遠超出了我對SO中不同解決方案的理解和收集信息。但是在x中,我總是從第一個上下文context.EventSessionTeamModels獲取值,但是第二個值沒有任何值。但是Select塊中的所有內容都需要從第二個context.SessionModels中提取。也許我以一種錯誤的方式加入了他們。我需要知道需要做什麼。讓我知道是否需要代碼的其他部分以外的代碼。使用實體框架在asp.net mvc5中加入多個表格

IQueryable<SessionShortModel> shortInfoSession = context.EventSessionTeamModels 
.Join(context.SessionModels, x => x.session_id, y => y.session_id, (x, y) => x) 
.Where(x => x.event_id == eid && x.bp_id == attendeeId && x.role_code == "ATD") 
.Select(x => new SessionShortModel { 
    StartTime = x.start_date, 
    EndTime = x.end_date, 
    Day = DbFunctions.TruncateTime(x.start_date), 
    Year = x.start_date.Year, 
    Month = x.start_date.Month, 
    Name = x.session_name 
    }); 

回答

0

在EF你一定要關係的實體,EventSessionTeamModels需要有propierty SessionModels

List<SessionShortModel> shortInfoSession = context.EventSessionTeamModels 
.Include("SessionModels") 
.Where(x => x.SessionModels.event_id == eid && x.SessionModels.bp_id == attendeeId && x.SessionModels.role_code == "ATD") 
.Select(x => new SessionShortModel { 
    StartTime = x.start_date, 
    EndTime = x.end_date, 
    Day = DbFunctions.TruncateTime(x.start_date), 
    Year = x.start_date.Year, 
    Month = x.start_date.Month, 
    Name = x.session_name 
    }).ToList(); 
+0

我同意導航屬性比連接更合適,但是'Include'在這裏沒有任何效果,因爲查詢以投影結束。 –

+0

EventSessionTeamModels必須具有屬性IEnumerabe sessionsModels = get; set;和映射關係[info](http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx) – J4ime

1

可能是它解決您的問題。您在使用「x」時從第一個表中獲取數據。將變量更改爲「Y」,您將從第二個表中獲取數據。

var data =(from ep in context.EventSessionTeamModels 
      join e in context.SessionModels on ep.session_id equals e.session_id 
      where ep.event_id == eid && ep.bp_id == attendeeId && ep.role_code == "ATD" 
      select new SessionShortModel{ 
       StartTime = e.start_date, 
       EndTime = e.end_date, 
       Day = DbFunctions.TruncateTime(e.start_date), 
       Year = e.start_date.Year, 
       Month = e.start_date.Month, 
       Name = e.session_name 
      }); 
+0

也許...謹慎解釋爲什麼這會有所幫助? –