外连接上的NullReferenceException

时间:2013-03-31 14:25:29

标签: c# linq nullreferenceexception

我试图从FDerive获取所有数据,但是我尝试使用where子句设置过滤器。不幸的是,当我在spd中的行为空时触摸spd时,我得到一个nullreferencexpection。

var Result = from fpd in FDerive
                             join spd in SDerive
                             on new { fpd.PId, fpd.SId }
                             equals new { spd.PId, spd.SId } into allRows
                             from spd in allRows.DefaultIfEmpty()
                             where spd.SId == ""
                             || spd.PId == ""
                             select new { fpd, spd };

如何解决null错误?

2 个答案:

答案 0 :(得分:0)

DefaultIfEmpty<T>将返回一个只包含一个默认值为T的元素的集合 - 在本例中为null - 如果源集合为空。如果在联接中没有返回任何项目,spd将为null

尝试检查where子句

中的null
var Result = 
    ...
    where spd == null || spd.SId == "" || spd.PId == ""
    select new { fpd, spd };

答案 1 :(得分:0)

我在以下问题的代码底部找到了答案

LINQ double left join

var results =
        from person in students
        join entry in subquery on person.FullName equals entry.AuthorFullName into personEntries
        from personEntry in personEntries.DefaultIfEmpty()
        orderby person.FullName
        select new
        {
            PersonName = person.FullName,
            BlogTitle = personEntry == null ? "" : personEntry.Title
        };