我想使用LINQ-to-objects來查詢深度幾個級別的對象集合來提取值。例如,給定一個實體對象我想,如果一個標誌被設置爲1以使EMAILADDRESS字符串,否則返回null:LINQ to Objects查詢忽略層次結構中的空對象
Entity.CommunicationCollection.Communication.CommunicationDetail.EmailAddress
凡CommunicationDetail看起來是這樣的:
public class CommunicationDetail
{
public int Flag;
public string EmailAddress;
}
我想出了查詢看起來像這樣:
string email = Entity.CommunicationCollection.FirstOrDefault(x => x.Communication.CommunicationDetail.Flag == 1).EmailAddress;
這樣做的問題是層次結構中的任何空對象都會導致null ref異常。有沒有辦法構建查詢以某種方式忽略空值,而不是首先檢查每個對象? (以上是一個簡化的例子,我正在研究的項目中的嵌套更加深入。)
您當前的代碼將無法編譯 - 我懷疑你想''==而不是'='。 –
快速回答:不。你必須自己檢查空值。 –
另外,如果沒有與條件匹配的對象,FirstOrDefault()將返回null。因此,除非你100%確定它實際上會返回一些東西,否則執行'.FirstOrDefault(xxx).Something'本身就是危險的。 –