2011-12-28 3 views
1

私はシンプルな配列のセットを持っています。基本的には、追加フィールド(辞書の一種)を持つアイデンティティのリストです。私は常に(例えば、「ユーザ」は整数であり、Ordersの任意の値を有し、この配列に対して別の値をチェックし、満たされている項目に引っ張ることが必要である。たびOrders更新目的地にまだ存在しないすべてを選択

[ 
{ 
    "Id" : 1, 
    "Requirement" : { 
    "Value" : "2", "Name" : "Orders" 
    } 
}, 
{ 
    "Id" : 2, 
    "Requirement" : { 
    "Value" : "4", "Name" : "Orders" 
    } 
}, 
{ 
    "Id" : 3, 
    "Requirement" : { 
    "Value" : "6", "Name" : "Orders" 
    } 
}, 
{ 
    "Id" : 4, 
    "Requirement" : { 
    "Value" : "8", "Name" : "Orders" 
    } 
}, 
] 

、私は User ...次のようにそれでは、これはうまくいく

Ordersがより大きいまたは要求値に等しいですが、値が引かず、彼らがすでに持っている配列のうち、すべてのアイテムを取得するためにしていたいです1 Order。 (何も起こらない) Userは2 Orderを持っています。 (ユーザの更新操作が実行されるとId 1が引かれる) Userは、4 Orderを達成する。 (Id 2は引き込まれていますが、Id 1は既に存在しているのでスキップされます)

LINQクエリでこれを実現する単純な方法はありますか?私は「最後にチェックされた」値を格納する贅沢さは持っていません。データ構造は、この時点で私が変更できるものではありません。

答えて

1
Orders.Where(o => o.Requirement.Value > requirment).Except(processedOrders); 

まずExceptを使用すると、すでに処理された注文を削除し、要件を満たすOrdersを選択します。

+0

ありがとうございました。これはうまくいった。私はすぐ後に新しい問題を発見しましたが、これは私の特定の質問に答えました。続けられる質問はhttp://stackoverflow.com/questions/8659342/linq-select-all-that-match-a-single-field-merge-on-originalで終わりです。 – Ciel

1

あなたは別の配列内の値でないかどうかを確認するためにAnyメソッドを使用することができます。

myArray.Where(o => !otherArray.Any(inner => inner.id == o.id)); 
関連する問題