2012-05-14 65 views
-6

在下面的代碼中,我試圖從列表中獲取null,空字符串和源組件。我還沒有測試過這個代碼,但是我的直覺告訴我,如果過濾List的源代碼和空字符串(如果它的值爲空值),它會中斷。檢查Lambda表達式中的空值

我試圖先提取空值,但我仍在過濾基本列表。我怎樣才能重新編寫這段代碼,以最好的方式完成我想要做的事情?

List<LineItem> nullList=itemsList.Where(s => s[Constants.ProductSource] == null) 
           .ToList(); 

NALineItems = itemsList.Where(s => s[Constants.ProductSource] == source 
            || s[Constants.ProductSource] == String.Empty) 
         .ToList(); 

NALineItems = nullList.Union(NALineItems).ToList(); 

s [Constants.ProductSource]是Microsoft ECommerce PurchaseOrder對象的附件屬性。它基本上是對象的另一個屬性。

+6

「我還沒有測試過這個代碼,但我的直覺告訴我它會破壞」這意味着你提前問這個問題。 – RQDQ

+0

你知道String.IsNullOrEmpty嗎? –

+1

'itemsList'是否包含數組?這是什麼[Constants.ProductSource]'? – Magnus

回答

1

基於「我試圖讓空,空字符串,和源組件從列表的」我想你的意思是你想要一個包含這3個特定值的列表。

var allItems = itemsList 
       .Where(s => string.IsNullOrEmpty(s[Constants.ProductSource]) 
          || s[Constants.ProductSource] == source) 
       .ToList() 
+0

我認爲你的意思是「|| s [Constants.ProductSource] == source」,而不是==,否則會發生奇怪的事情。 –

+0

是的感謝更正!其實它甚至不會編譯。 –

0

有沒有理由不能將表達式合併爲一個?我還想補充一點,關鍵在字典中存在檢查:

List<LineItem> NALineItems = itemsList.Where(s => 
    s.ContainsKey(Constants.ProductSource) && (
     String.IsNullOrEmpty(s[Constants.ProductSource]) || 
     s[Constants.ProductSource] == source)) 
    .ToList(); 
+0

有趣。字典在哪裏定義?我不知道這 –

+0

我假設'itemslist'是您的代碼中的字典列表,但它也可以是列表的列表(如果Constants.ProductSource是一個整數)。我不得不看更多的上下文。 –