2012-01-04 50 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())