[英]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.