繁体   English   中英

无法将nullable int设置为LINQ查询的返回值?

[英]Can't set nullable int to LINQ query's return value?

我想根据某些条件从表中检索Id。 如果不满足条件,我只想返回默认值(在这种情况下,我假设为null)。 这是我的代码:

int? circuitTypeId = cimsContext.CircuitTypes.FirstOrDefault(ct => ct.Name == circuitType).Id;

我假设如果ct.NamecircuitType之间没有匹配,则返回的值为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM