IList比较不符合预期

时间:2012-01-04 15:30:57

标签: c# linq

我有两个我要比较的列表,遗憾的是它们不属于保存类。一个来自magento api,另一个是包含来自另一个的一些值的自定义类。 (只有我需要的那些)

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

API存在问题,我必须获取所有订单并比较我想要的订单,然后单独请求额外信息,但上述查询无效,只是继续执行所有操作。

我已经查看了其他比较,但它们都要求类相同。如果有人能说清楚,我将不胜感激。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

x的类型和order的类型并不重要,但OrderNumberincrement_id的类型不重要。他们是什么类型的?

如果一个是string而另一个int,那么您应该将int转换为string

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