簡體   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