2017-05-05 10 views
0

私はオブジェクトのリストを持っています。これらのオブジェクトのそれぞれはNameプロパティを持ち、ObservablePairCollectionはちょうど辞書のように機能するカスタム辞書ですが、キーと値のペアを持っています。指定されたプロパティ値を持つリスト内のオブジェクトを検索し、辞書値を見つけよう

名前とキーの2つの文字列を指定すると、与えられた名前に最初に一致するオブジェクトを探し、そのモデルの辞書から特定のキー値に一致するpairを選択します。

例:nameの文字列「model1」とキーの「Latitude」を指定すると、nameプロパティのオブジェクトはmodel1になります。オブジェクトの辞書のキーと値のペアは、キーはLatitudeと同じです。

現在、私は使用してNameと一致する最初の部分を行うことができます。

private ObservableCollection<ModelBase> models; 
//add objects to models 

string stringToFind = "model1"; 

models.Single(m => m.Name == stringToFind); 

だから、これはNameプロパティはmodel1に等しいだオブジェクトを返します。

私はキーと値のペアを取得するために使用する正しいステートメントを見つけることができません。

private ObservablePairCollection<string, string> _fields = new ObservablePairCollection<string, string>(); 
public ObservablePairCollection<string, string> Fields 
{ 
    get { return _fields; } 
    set { _fields = value; OnPropertyChanged("Fields"); } 
} 

private string _name; 
public string Name 
{ 
    get { return _name; } 
    protected set 
    { 
     if (_name != value) 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 
} 

私は可能な場合はLINQを使用するようにしたいのですが、ない巨大な契約でない場合:

ここでは、クラスの相対的な部分です。

+1

:あなたは、単にFields proyertyをフィルタリングする必要があります。 'models.Single(M => m.Name == "someNameという")Fields.Single(F => f.Key == "Latitude"); ' – Nino

+0

@Ninoなぜyですか?辞書の中のキーを検索するときに 'Single'を使用することはありますか? – InBetween

+0

@InBetween、あなたが正しいです、 'First()'が良いアプローチです。 – Nino

答えて

1

まず、なぜSingle?与えられたNameのオブジェクトが1つだけあり、をこの特定のコードで実行する必要がありますか? Singleは、見つかったオブジェクトが一意であることを確認するためにコレクション全体を列挙するため、高価です。

あなたが最初に見つけることにだけ興味がある場合があれば、単に適切な名前First拡張メソッドを使用します。

models.First(m => m.Name == stringToFind); 

[OK]を、もしあればそのためには、与えられたNameとの最初のオブジェクトを返します。私が正しくあなたを理解している場合、あなたがこのような何かを必要とし、

var pair = models.First(m => m.Name == stringToFind) 
       ?.Fields 
       .First(f => f.Key = keyToFind); 
+0

これらのオブジェクトには常に6つのインスタンスがあり、それぞれに固有の名前があります。ですから、正しい名前を見つけたら、キー/値のペアを見つけるためにシングルを使う必要はありません。 – pfinferno

+1

@pfinferno 'First'はシークしたペアを返すのが最も安いので、最初のマッチを見つけたら反復を止めます。 'Where'または' Single'は列挙全体を反復しますが、これはより高価です。 – InBetween

関連する問題