2012-01-04 21 views
-1

私は比較しようとしている2つのリストを持っています。悲しいことに、それらはsaveクラスではありません。 1つはmagento APIに由来し、もう1つはカスタムクラスであり、他のクラスの値を含みます。 (私は必要なものだけ)IListの比較が期待どおりに動作しない

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

私はすべての注文を取得し、私が欲しいものを比較する必要があり、その後、個別に余分な情報が、上記のクエリが動作していないを要求するAPIに問題がありますすべてを続けているだけです。

私は他の比較を見ましたが、それらはすべてクラスが同じであることが必要です。もし誰かが光を放つことができたら、私は感謝するでしょう。

+1

あなたがループについて尋ねています。そのループを含める。 –

+0

どのようなタイプのOrderNumberとincrement_idですか?それらが異なっていると、CompareToが返されない場合があります。 – Matthias

+0

あなたの返信ありがとうございます。 @HenkHolterman - 私はループが関連しているとは思わない、apolagies。 Matthias OrderNumberとincrement_idは、両方の文字列の値が同じです。 – Compunutter

答えて

1

それはそうAny方法を使用してのように書き換えることができます。

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

すると、それは常に続けている理由として、式は常に真でなければなりません!

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

リッチ、ご協力いただきありがとうございます、私は非常に感謝しています。あなたは私の問題を解決しました!あなたの2番目の例を問題なくまっすぐに使いました。 – Compunutter

0

xの種類とorderのタイプではない私は、その場合には、あなたがAllメソッドを使用することができ、要件がif the order increment id is not an order number of an existing order then continueであると推定します重要ですが、種類はOrderNumberincrement_idです。彼らのタイプは何ですか?

1はstringや他のintであるなら、あなたはstringintを変換する必要があります。

.Where(x => x.OrderNumber == order.increment_id.ToString()) 
関連する問題