【问题标题】:Joining multiple tables in asp.net mvc5 using Entity Framework使用实体框架在asp.net mvc5中加入多个表
【发布时间】:2016-04-19 10:04:48
【问题描述】:

我正在尝试连接两个模型,然后从连接表中选择值。从我的理解和从 SO 中的不同解决方案收集信息来看,到目前为止,我已经实现了这一点。但是在 x 中,我总是从第一个上下文 context.EventSessionTeamModels 中获取值,但从第二个上下文中什么也没有。但是Select 块中的所有内容都需要从第二个context.SessionModels 中获取。也许我以错误的方式加入了他们。我需要知道需要做什么。让我知道除了以下代码之外是否还需要代码的任何其他部分。

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

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework linq-to-entities


    【解决方案1】:

    在 EF 中你必须关联实体,EventSessionTeamModels 需要有属性 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();
    

    【讨论】:

    • 我同意导航属性比连接更合适,但是Include 在这里没有任何作用,因为查询以投影结束。
    • EventSessionTeamModels 必须具有属性 IEnumerabe sessionsModels = get;set;以及映射中的关系info
    【解决方案2】:

    也许它可以解决您的问题。当您使用“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
                 });
    

    【讨论】:

    • 也许...想解释一下为什么这会有所帮助?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多