web-dev-qa-db-ja.com

オブジェクトのリストに特定の値のプロパティが含まれているかどうかを確認する

次のコードがあるとします:

class SampleClass
{
    public int Id {get; set;}
    public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";

私の質問は、myList文字列に一致するNameプロパティを持つオブジェクトのみをnameToExtractから抽出するために使用できるリスト関数です。

この質問が本当に単純/明白な場合、私は事前に謝罪します。

56
rybl

Enumerable.Where 拡張メソッドを使用できます:

_var matches = myList.Where(p => p.Name == nameToExtract);
_

_IEnumerable<SampleClass>_を返します。フィルタリングされたListが必要だと仮定すると、上記の.ToList()を呼び出すだけです。


ところで、今日上記のコードを書いていた場合、Unicode文字列の処理の複雑さを考えると、等価チェックを異なる方法で行います。

_var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
_

参照

90
Dan J
myList.Where(item=>item.Name == nameToExtract)
9
George Polevoy
using System.Linq;    
list.Where(x=> x.Name == nameToExtract);

編集:質問の読み間違い(現在はすべて一致)

2
JanW

LINQを示唆する他の回答に加えて、この場合の別の選択肢は、 FindAll インスタンスメソッドを使用することです。

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
1
LukeH