リストから名前を選択するにはどうすればよいですか?それ自体がリストにありますか?
私の構造:
public class Item
{
int id;
List<Name> names;
}
public class Name
{
int id;
string name;
}
List<Item> Items;
コード:
Items.Select(a => a.id = 1) //whats next
リスト内のすべての名前が必要な場合は、次のことができます。
List<Name> matchingNames = Items.Where(a => a.id == 1).Select(a => a.names);
または、リストから文字列名のリストが必要な場合は、次のようにすることができます。
List<string> matchingNames = Items
.Where(a => a.id == 1)
.SelectMany(n => n.names)
.Select(n => n.name)
.ToList();
次に、2番目のステートメントを使用している場合は、次のようにしてリストを次の形式で出力できますitem, item, item
。
string outputtedNames = string.Join(", " + matchingNames);
編集:コメントで要求されているように、名前IDに基づいてIDで名前を取得する方法は次のとおりです。
List<Name> matchingNames = Items
.SelectMany(a => a.names)
.Where(n => n.id == 1)
.ToList();
編集2:名前アイテムとIDが1のアイテムを表示するには、次のことを試してください。
List<Name> matchingNames = Items
.Where(a => a.id == 1)
.SelectMany(a => a.names)
.Where(n => n.id == 1)
.ToList();
あなたが使用することができます
var result = Items.Where(a => a.id == 1 && a.names.Contains(333)).Select(a => a.names);
結果を制限するためにを使用できWhere
、投影のためSelect
に指定されたフィールドで使用できます。
var result = Items.Where(x=>x.id == 1).Select(x=>x.name).ToList();
最後に、結果を取得するには、linqクエリを実行する必要があります。これは、ToList()
またはforeach
ループで実行できます。