2012-01-04 46 views
-1

我有2個列表,我試圖比較,可悲的是他們不是保存類。一個來自magento api,另一個來自另一個包含一些值的自定義類。 (只是我需要的)IList比較行爲不如預期

if (existingPhotoOrders.Where(x => x.OrderNumber.CompareTo(order.increment_id) == 0).ToList().Count > 0) 
       continue; 

沒有與該API一個問題,我已經把所有的訂單和比較,我想那些,然後要求單獨額外的信息,但上面的查詢不工作它只是繼續與一切。

我看過其他比較,但他們都需要類是相同的。如果有人能夠說出一些光芒,我會很感激。

+1

你問一個循環。所以包括那個循環。 – 2012-01-04 15:34:36

+0

OrderNumber和increment_id是什麼類型?如果它們不同,這可能會導致CompareTo不被重視。 – Matthias 2012-01-04 15:35:07

+0

謝謝你的回覆。 @亨克霍特曼 - 我不認爲循環是相關的,apolagies。 Matthias OrderNumber和increment_id是兩個字符串的相同值。 – Compunutter 2012-01-05 09:59:49

回答

1

可以重寫,像這樣使用Any方法:

if (existingPhotoOrders.Any(x => x.OrderNumber.CompareTo(order.increment_id) == 0)) 
    continue; 

至於爲什麼它總是不斷,表達必須是真實的!我相信要求是if the order increment id is not an order number of an existing order then continue,在這種情況下,你可以使用All方法:

if (existingPhotoOrders.All(x => x.OrderNumber.CompareTo(order.increment_id) != 0)) 
    continue; 

但作爲更高性能的替代方案:

var orderIds = new HashSet<int>(existingPhotoOrders.Select(epo => epo.OrderNumber)); 
foreach (var order in orders) 
{ 
    if (!orderIds.Contains(order.increment_id)) 
    { 
    continue; 
    } 
    // rest of method here 
} 
+0

非常感謝您的幫助,我非常感謝。你已經解決了我的問題!我選擇直接使用第二個例子,沒有任何問題。 – Compunutter 2012-01-05 10:01:13

0

類型的xorder類型不但重要的是OrderNumberincrement_id的類型。他們是什麼類型的?

如果一個string和其他int,那麼你應該轉換到intstring

.Where(x => x.OrderNumber == order.increment_id.ToString())