![](/img/trans.png)
[英]Convert nullable int to int in linq query return anonymous type
[英]Can't set nullable int to LINQ query's return value?
我想根据某些条件从表中检索Id。 如果不满足条件,我只想返回默认值(在这种情况下,我假设为null)。 这是我的代码:
int? circuitTypeId = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType).Id;
我假设如果ct.Name
和circuitType
之间没有匹配,则返回的值为null
。 但是,在运行我的程序时,我在这一行上收到错误,说“空引用异常”。 我知道记录不存在,但是我不能将查询返回的null
赋给我的nullable int
变量吗?
根据您的查询,您的假设是错误的: -
int? circuitTypeId = cimsContext.CircuitTypes
.FirstOrDefault(ct => ct.Name == circuitType).Id;
当找到匹配时,这将返回int
,但是当没有名称与circuitType
名称匹配时,它将抛出Null Reference Exception
。 你应该做这个:-
var circuitTypeObj = cimsContext.CircuitTypes
.FirstOrDefault(ct => ct.Name == circuitType);
int? circuitTypeId = circuitTypeObj == null ? (int?)null : circuitTypeObj.Id;
尝试这个 :
int? circuitTypeId = cimsContext.CircuitTypes.Where(ct => ct.Name == circuitType).Select(p => p.Id).FirstOrDefault();
在分配circuitTypeId
变量之前,应首先检查null
:
int? circuitTypeId;
var circuitType = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType);
if(circuitType != null)
{
circuitTypeId = circuitType.Id;
}
问题是.Id
可能试图引用null CirctuitType。
var circuitType = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType);
int? circuitTypeId = circuitType.Id; // if circuitType is null, a null reference exception is thrown
相反,您需要测试null的引用:
var circuitType = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType);
int? circuitTypeId = (circuitType == null ? (int?)null : circuitType.Id);
在C#版本6中你可以简单地添加一个?
在id
之前,以防止引用null对象的属性。
int? circuitTypeId = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType)?.Id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.