次の構造を含むリストがあります。
class CompareDesignGroup
{
string FieldId;
string Caption;
}
リストには、上記の構造のアイテムが含まれています。
FieldIdがわかっている場合、リストの要素を取得することは可能ですか?
ジェネリック リスト クラスでFind メソッドを使用できます。find メソッドは、単一のアイテムのリストをフィルタリング/検索できる述語を取ります。
List<CompareDesignGroup> list = // ..;
CompareDesignGroup item = list.Find(c => c.FieldId == "SomeFieldId");
item
リストに一致する項目がない場合は null になります。
複数の項目を検索する必要がある場合は、FindAll メソッドを使用できます。
List<CompareDesignGroup> list = // ..;
List<CompareDesignGroup> result= list.FindAll(c => c.FieldId == "SomeFieldId");
はい。LINQまたはの組み込み機能を使用しList
ます。
LINQは次のように使用できます。
CompareDesignGroup result = yourList.FirstOrDefault(x => x.FieldId == yourKnownId);
FirstOrDefault
この方法を使用する場合、リストに既知のIDのレコードが含まれていない場合にresult
なります。null
したがって、使用する前にresult
、そうでないかどうかを確認してくださいnull
。
を使用Where
してから使用できますFirstOrDefault
。それがLINQ式です。
var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").FirstOrDefault();
またはSingleOrDefault
、欲しいアイテムを手に入れるために。このような:
var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").SingleOrDefault()
またはさらに簡単です:
var result = ls.SingleOrDefault(a => a.FieldId=="123");
var result2 = ls.FirstOrDefault(a => a.FieldId=="123");
リスト内のアイテムを見つける方法はたくさんあります。
LINQは、独自の検索機能を提供しないコレクションを操作するのに役立つ拡張メソッドを提供します (または、コレクション自体がなく、のような汎用インターフェイスがある場合IEnumerable<T>
)。オブジェクトがあり、List<CompareDesignGroup>
そのオブジェクトで作業する場合は、そのクラスによって提供されるメソッドを使用できます (特殊化されたメソッドは、ほとんどの場合、LINQ メソッドよりも高速であり、コレクションの内部構造を認識しており、多くの抽象化レイヤーに依存する必要はありません)。
すべての例で、文化に不変で大文字と小文字を区別する比較をFieldId
仮想id
パラメーターに対して実行します。これは必要なものではない可能性があり、要件に応じて変更する必要がある場合があります。
List<T>
次のように宣言されたリストがあるとします。
List<CompareDesignGroup>() list = new List<CompareDesignGroup>();
検索条件に一致する最初の要素を見つけるには (null
アイテムが見つからない場合は返されます):
CompareDesignGroup item = list.Find(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
検索条件に一致するすべての要素を検索するには:
List<CompareDesignGroup> items = list.FindAll(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
IEnumerable<T>
(または、たとえばIList<T>
)次のように宣言されたリストがあるとします。
IEnumerable<CompareDesignGroup> list = ...
検索条件に一致する最初の要素を見つけるには (null
アイテムが見つからない場合):
CompareDesignGroup item = list.FirstOrDefault(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
検索条件に一致する最初の要素を見つける(または、アイテムが見つからない場合は例外をスローする) には:
CompareDesignGroup item = list.First(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
検索条件に一致するすべての要素を検索するには:
IEnumerable<CompareDesignGroup> item = list.Where(
x => String.Equals(x.FieldId, id, StringComparison.InvariantCulture));
多くの LINQ 拡張メソッドがあります。それらすべてを調べて、ニーズにより適したものを見つけることをお勧めします。
List<CompareDesignGroup> listData = new List<CompareDesignGroup>(); // init the data
var result = listData.Where(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets all data
var first = listData.FirstOrDefault(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets first search result