C# 执行具有可为空FK的查询时Dapper引发NullReferenceExceptions

C# 执行具有可为空FK的查询时Dapper引发NullReferenceExceptions,c#,sql,dapper,mapper,C#,Sql,Dapper,Mapper,我正在尝试执行一个具有多个左联接的查询,因为其中一个外键列是可为null的,当Dapper发现某个记录中该特定列是可为null的时,当映射器尝试将结果放在一起时,会引发NullReferenceException。 我正在使用'Id'作为我的PK列,并且与其他任何表都没有问题,但是我不太确定解决这个问题的最佳方法 我需要能够返回一组结果,其中一些字段(和相关记录)可能为空,而其他字段可能不为空。。有没有一种方法可以绕过这个问题而不需要两个单独的查询 这是查询的一部分。。ani.DeviceMac

我正在尝试执行一个具有多个左联接的查询,因为其中一个外键列是可为null的,当Dapper发现某个记录中该特定列是可为null的时,当映射器尝试将结果放在一起时,会引发NullReferenceException。 我正在使用'Id'作为我的PK列,并且与其他任何表都没有问题,但是我不太确定解决这个问题的最佳方法

我需要能够返回一组结果,其中一些字段(和相关记录)可能为空,而其他字段可能不为空。。有没有一种方法可以绕过这个问题而不需要两个单独的查询

这是查询的一部分。。ani.DeviceMacAddress是可为空的FK

(query,
(ani, adm, d, ma, sma, n, i, sni) =>
    {
        ani.DeviceMacAddress = adm;
        adm.Device = d;  // Throws NullReferenceException here
        adm.MacAddress = ma;
        ani.NetworkV4 = n;
        ani.IpAddressV4 = i;
        ani.Status = sni;
        ma.Status = sma;
        return ani;
    },

我猜从位置看,
adm
为空。所以检查一下:

ani.DeviceMacAddress = adm;
if(adm != null) {
    adm.Device = d;
    adm.MacAddress = ma;
}
ani.NetworkV4 = n;
ani.IpAddressV4 = i;
ani.Status = sni;
if(ma != null) {
    ma.Status = sma;
}
return ani;

我刚想到,这是QueryMultiple的任务吗?一个查询使用适当的映射将数据集限制在列不为null的位置,另一个查询使用自己的映射将数据集限制在列为null的位置?太棒了,谢谢Marc。我甚至没有想到在映射本身中检查null。