[英]How to dereference a string that might be null in LINQ
假設我需要將一個對象與數據庫中名為“索引”的表中存儲的其他對象進行比較。 我需要按對象的X
屬性進行比較,該屬性是一個字符串,但它可能為null
。
在比較之前,我還必須修剪我的compareObject的X屬性。 我嘗試執行以下操作:
List<Guid> Ids = DataContext.Indexes.Where(ci =>
(comparedObject.X != null && ci.X != null ?
ci.X == comparedObject.X.Trim() :
(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty))).Select(ci => ci.Id).ToList();
而且即使comparedObjects.X
是null
它仍然拋出了一個空引用異常comparedObject.X.Trim()
表達。
我認為這是由於linq轉換而發生的?
有沒有修剪一個漂亮的方式X
性能,而無需指定comparedObject.X
一個空字符串的情況下,它的查詢之前是空?
編輯:我想詳細說明-為簡化起見,此查詢已減少,我還比較了其他6個屬性。 我想將其保留在1個查詢中,而不要單獨包含在X
屬性中的2個查詢中。 在查詢之外進行修剪是我當前的解決方案,我希望有一個陳述中的解決方案,以防萬一:)
謝謝!
而且,即使compareObjects.X為null,它仍然為compareedObject.X.Trim()表達式引發null引用異常。
你最好在linq語句之前做一個空檢查
if(comparedObject !=null && !string.IsNullorEmpty(comparedObject.X))
{
// your code goes here
}
下面的代碼
(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty)
可以更改為
string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)
我將如下更改代碼
List<Guid> Ids = DataContext.Indexes.Where(ci =>
(string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)) || ci.X == comparedObject.X.Trim())
.Select(ci => ci.Id).ToList();
也許您可以嘗試:
List<Guid> Ids = DataContext.Indexes.Where(ci =>ci.X != null ? ci.X == comparedObject.X==null?"":comparedObject.X.Trim() :
(comparedObject.X == null || comparedObject.X == null)))
.Select(ci => ci.Id).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.