Linq查询中的引用错误即使检查Null也不会消失

本文关键字:Null 检查 消失 查询 引用 错误 Linq | 更新日期: 2023-09-27 18:17:40

我有以下查询,查询中的"main"是前面步骤的结果。

var query = from a in main.AsEnumerable()
            join b in result on a.id equals b.tId into joint
            from c in joint.DefaultIfEmpty()
            select new weekly()
            {
                id = a.id,
                Mon = a.Mon
                MHrs = (c.HoursList.Where(x => x.adt == "Monday")
                                   .Select(y => y.thr).FirstOrDefault())
           });

当我运行这个查询时,我得到System.NullReferenceException为mhr。当我注释掉mhr时,它运行得很好。

I did try

y => y.thr == null ? null : 0

但它仍然不起作用。

请让我知道如何修复这个查询运行它没有空引用异常。由于

Linq查询中的引用错误即使检查Null也不会消失

当您使用DefaultIfEmpty时,joint.DefaultIfEmpty()将为不匹配的行返回null(类型的默认值),因此您必须处理:-

query= from a in main.AsEnumerable()
           join b in result on a.id equals b.tId into joint
           from c in joint.DefaultIfEmpty()
           select new weekly()
            {
                id= a.id,
                Mon= a.Mon
                MHrs= c != null ? c.HoursList.Where(x=> x.adt=="Monday")
                                  .Select(y=>y.thr).FirstOrDefault() : ""
           });

假设thrString