我想根据某些条件从表中检索Id。如果不满足条件,我只想返回默认值(在本例中,我假设为null)。这是我的密码:
int? circuitTypeId = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType).Id;
我假设,如果ct.Name
和circuitType
之间没有匹配,则返回的值是null
。但是,在运行我的程序时,我会在这一行上看到一个错误,上面写着"Null reference exception“。我知道记录不在那里,但难道我不能将查询返回的null
分配给我的nullable int
变量吗?
发布于 2015-01-04 21:38:58
在分配null
变量之前,首先应该检查circuitTypeId
:
int? circuitTypeId;
var circuitType = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType);
if(circuitType != null)
{
circuitTypeId = circuitType.Id;
}
发布于 2015-01-04 21:42:06
你的假设是错误的,根据你的疑问:-
int? circuitTypeId = cimsContext.CircuitTypes
.FirstOrDefault(ct => ct.Name == circuitType).Id;
这将在找到match时返回int
,但当没有名称与circuitType
名称匹配时,它将抛出一个circuitType
。你应该这么做:-
var circuitTypeObj = cimsContext.CircuitTypes
.FirstOrDefault(ct => ct.Name == circuitType);
int? circuitTypeId = circuitTypeObj == null ? (int?)null : circuitTypeObj.Id;
发布于 2015-01-04 21:41:35
试试这个:
int? circuitTypeId = cimsContext.CircuitTypes.Where(ct => ct.Name == circuitType).Select(p => p.Id).FirstOrDefault();
https://stackoverflow.com/questions/27773941
复制相似问题