我创建了一个方法,我用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;
是不是可以像这样调用它?
答案 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?中解释。