You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询含NULL外键的课程返回MVC项目时单日课程不显示问题

问题根源

你现在的查询结果过滤了单天课程,核心原因是2个:

  • SQL里对WeekDayID2关联用了INNER JOIN:内连接要求关联的两边字段都有非空匹配值才会返回行,当Course表的WeekDayID2为NULL时,无法和tblSiteWeekDay匹配,整条课程数据会被直接排除,最终只有两天的课程会被返回。
  • 视图判断逻辑有漏洞:即使SQL返回了WeekDayTitle2为NULL的结果,你现在用item.WeekDayTitle2!=""判断的话,NULL不等于空字符串,会误触发条件输出多余内容。
具体修复方案

1. 修改SQL查询语句

把第二个内连接改成LEFT JOIN(左外连接),保留WeekDayID2为NULL的课程行,同时可以用COALESCE把NULL转为空字符串,避免C#中出现NULL值问题:

select 
        CourseID, 
        tsw1.WeekDayTitle as WeekDayTitle1,
        COALESCE(tsw2.WeekDayTitle, '') as WeekDayTitle2
    from 
    Course
    inner join tblSiteWeekDay as tsw1 on Course.WeekDayID1=tsw1.SiteWeekDayID   
    left join tblSiteWeekDay as tsw2 on Course.WeekDayID2=tsw2.SiteWeekDayID 

如果你的数据库是SQL Server,也可以用ISNULL(tsw2.WeekDayTitle, '')替代COALESCE,效果一致。

2. 优化视图判断逻辑

把原有判断改为判断字符串是否为空或者NULL,覆盖所有无值的场景:

@foreach (var item in Model)
{
    <div>
        <span>@item.WeekDayTitle1</span>
        @if (!string.IsNullOrEmpty(item.WeekDayTitle2))
        {
            <span>和 @item.WeekDayTitle2 </span> 
        }
    </div>
}

可选优化:修正模型字段名

你当前的CourseModel里的CoursID拼写少了一个字母e,和SQL返回的CourseID不匹配,如果你是用字段名自动映射的话,建议修正为:

public class CourseModel{
    public int  CourseID { get; set; } // 修正拼写
    public string WeekDayTitle1 { get; set; }
    public string WeekDayTitle2 { get; set; }
}

内容的提问来源于stack exchange,提问作者user16070481

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:09:02