簡體   English   中英

如何在LINQ中解引用可能為null的字符串

[英]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.Xnull它仍然拋出了一個空引用異常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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM