これは、Linq プロジェクションを使用して簡単に実行できます。機能表記法:
var myEnumerable = new IEnurable<CustomClass>;
// ... fill myEnumerable
List<int> customProperties
= myEnumrable.Select(item => item.customProperty).ToList();
ラムダ式は int を射影item => item.customProperty
するので、int のリストを取得します。基本的に、ラムダ式はitem
、パラメーターとして受け取りitem.customProperty
、結果として返す関数と同等です。のようなものint foo(CustomaClass item) { return item.customProperty}
。ラムダ式の特殊性は、それが匿名であり (存在しないfoo
)、戻り値とパラメーターの型がコンテキストから推測されることです。
ラムダ式 (C# プログラミング ガイド)
別:
List<int> customProperties
= (from item in myEnumerable
select item.customProperty).ToList();
この場合、プロジェクションはselect
節で直接行われます。すべての LINQ クエリは、で具体化できるように括弧の間にありますToList()
。
クエリ式の構文例: 射影
そしてここに、同様のクエリのすべてのバリエーションを確認できるコード フラグメントを残します。
public class Thing
{
public string Name { get; set; }
public decimal Value { get; set; }
}
public decimal GetValue(Thing thing)
{
return thing.Value;
}
public Thing[] Things =
{
new Thing { Name="Stapler", Value=20.35M},
new Thing { Name="Eraser", Value=0.65M}
};
[TestMethod]
public void GetValueListFromThing()
{
// query notation, direct projection
List<decimal> valuesA
= (from t in Things
select t.Value).ToList();
// query notation, projection with method
List<decimal> valuesB
= (from t in Things
select GetValue(t)).ToList();
// functional notation, projection with method
List<decimal> valuesC
= Things.Select(t => GetValue(t)).ToList();
// functional notation, projection with anonymous delegate
List<decimal> valuesD
= Things.Select(t => { return t.Value; }).ToList();
// functional notation, lambda expression
List<decimal> values
= Things.Select(t => t.Value).ToList();
}