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

时间:2015-10-14 06:43:53

标签: c# .net linq lambda

我有以下查询,查询中的“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())
           });

当我运行此查询时,我得到MH System.NullReferenceException。当我评论MHrs它运行正常。

我确实尝试了

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

但它仍然无效。

请让我知道如何修复此查询以在没有空引用异常的情况下运行它。谢谢

1 个答案:

答案 0 :(得分:0)

当您使用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