2011-08-05 7 views
2

私は次のクラス定義を持っている:LINQを使用してコレクション内の一意の値を確認しますか?

public class PriorityItem 
{ 
    public string uniqueID { get; set; } 
    public List<DelegationTask> DelegationTasks = new List<DelegationTask>(); 
    public List<int> Priorities = new List<int>(); 
} 

は今、私はこのようなこのクラスからリストを作成して言うことができます:

List<PriorityItem> pItems = new List<PriorityItem>(); 

そして今、私はこの内のアイテムの存在を確認したいですuniqueIDプロパティに基づいたリストこれはどのように行われますか?

たとえば、優先度アイテムが存在しない場合のみ、リストにPriorityItemのコレクションを設定します。それが存在するかどうかを判断するには、LINQを使ってuniqueIDの値をチェックする必要があります。

希望はこれが理にかなっています。

答えて

5

Any linq拡張メソッドは、特定の条件に一致するアイテムが見つかった場合にtrueを返します。次のようにあなたはそれを使用することができます。

string idToSearchFor = "123" 
bool exists = pItems.Any(item => item.uniqueId == idToSearchFor); 

上記のコードexistsであなたのリストは"123"uniqueIdPriorityItemが含まれている場合にのみ、trueになります。

+0

ありがとう、これは私が探していたものです! –

0

ExistsはAnyと同じことを行います。 Existsは、SQLの意味をAnyと少し一致させます。 AnyとAllは自然な修飾子の種類として自然に適合しますペア

しかし、文章で「私たちはこのユニークなIDを持っていますか?おそらく「存在する」は、可読性と意図の点でより適しています。

class Class1 
{ 
    [Test] 
    public void Test() 
    { 
     // initialise list 
     var pItems = new List<PriorityItem>(){new PriorityItem(){uniqueID = "1"}, new PriorityItem(){uniqueID = "2"}, new PriorityItem(){ uniqueID = "123"}}; 
     var IDtoFind = "123"; 
     var wasFound = pItems.Exists(o => o.uniqueID == IDtoFind); 
    } 
} 

public class PriorityItem 
{ 
    public string uniqueID { get; set; } 
    //public List<DelegationTask> DelegationTasks = new List<DelegationTask>(); 
    public List<int> Priorities = new List<int>(); 

} 
関連する問題