【问题标题】:Join in LINQ with DefaultIfEmpty still causing NullReferenceException使用 DefaultIfEmpty 加入 LINQ 仍会导致 NullReferenceException
【发布时间】:2019-07-27 21:27:03
【问题描述】:

真的有可能在 join 语句上导致 NullReferenceException,即使它有 DefaultIfEmpty() 代码?

     var getWorkerList = (from a in workerList
                         join ps in db.ProjectStatus on a.StatusId equals ps.StatusId into hjps
                         from ps in hjps.DefaultIfEmpty()
                         join psc in db.StatusColor on ps.StatusCode equals psc.StatusCode into hjpsc
                         from psc in hjpsc.DefaultIfEmpty()
                         join lu in db.LOOKUPS on psc.StatusColorID equals lu.LOOKUPS_ID into hjlu
                         from lu in hjlu.DefaultIfEmpty()
                         select new WorkerModel()
                         {
                            FullName = a.FullName
                            ,Color = lu.LOOKUPS_Code                  
                         }).OrderBy(a => a.WorkerId).ToList();

这是我得到NullReferenceException 错误的地方:

join lu in db.LOOKUPS on psc.StatusColorID equals lu.LOOKUPS_ID into hjlu
                         from lu in hjlu.DefaultIfEmpty()

添加此连接语句时出现错误。请帮忙。

【问题讨论】:

    标签: c# asp.net linq asp.net-mvc-4 asp.net-mvc-3


    【解决方案1】:

    您正在使用“左连接”而不是“.DefaultIfEmpty()”的“连接”

    所以您必须更正选择语句:将 'Color = lu.LOOKUPS_Code' 替换为:'Color = lu == null ? "" : lu.LOOKUPS_Code'。

    您还可以使用不同的重载 '.DefaultIfEmpty()' 来设置替换而不是 'null',这样 select 语句就不会抛出异常

    【讨论】:

    • 我也尝试删除语句` ,Color = lu.LOOKUPS_Code ` 但错误仍然出现
    • 奇怪...你确定吗,删除 `,Color = lu.LOOKUPS_Code ` 后你得到的正是“空引用”?如果您在删除该行代码后得到“空引用”,则该异常与您的查询语句无关,可能源自其他地方
    【解决方案2】:

    .DefaultIfEmpty() 返回具有单个默认值的序列如果原始源为空

    它仍然会抛出一个空引用异常,如果原始来源为空

    【讨论】:

    • 那么先生,您认为错误的连接在哪里?
    • 我无法知道您的哪些变量具有哪个值(我的意思是想象一下我可以远程告诉您计算机 RAM 中发生了什么,那不是很可怕吗?:)) .尝试生成minimal reproducible example,您可能会找到它。
    • 这里是场景,如果我删除了查找行,它不会导致错误,但是当添加时它会显示在哪里。我也尝试删除,Color = lu.LOOKUPS_Code,但无济于事仍然显示null reference
    猜你喜欢
    • 2013-08-07
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多