使用linq调用join方法时获取Null引用

时间:2015-10-15 11:33:24

标签: c# .net linq

我创建了一个方法,我用linq连接两个sql tabel。当我调试并进入方法并且我调用它时我可以看到它不是null。但是出于某种原因,我在调用它时会得到一个空引用。
这是我打电话的方法。

public ItemIdentity GetIdentityInfo(int tradeItemId)
    {
        var query = (from item in _db.TradeItems
                     join identity in _db.ItemIdentities on item.itemIdentities equals identity.id
                     where item.id == tradeItemId
                     select identity);
        return query as ItemIdentity;
    }

这就是我所说的。

var tradeItemUnitDescriptor = GetIdentityInfo(tradeItemId).tradeItemUnitDescriptor;

是不是可以像这样调用它?

1 个答案:

答案 0 :(得分:3)

您错过了First()FirstOrDefault()。此查询返回IQueryable<ItemIdentity>,无法转换为单个ItemIdentity,因此as ItemIdentity会产生null

因此,请使用return query as ItemIdentity而不是return query.First()

您需要确定所请求的实体是否可能不存在。通过使用First(),如果实体不存在,则允许该调用抛出。

如果您使用FirstOrDefault(),此方法仍然可以返回null,因此您需要在呼叫网站中检查该方法:

var item = GetIdentityInfo(tradeItemId);
if (item != null)
{
    // do something with item
}

但除了错误的演员表,这是你的错误的核心,其余部分在What is a NullReferenceException, and how do I fix it?中解释。